Files
e-tib.com/.next/dev/server/vendor-chunks/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76.js
Marc Mintel d14122005d Initial commit: E-TIB production hardening & E2E foundation
Former-commit-id: ef04fca3d76375630c05aac117bf586953f3b657
2026-04-28 19:11:38 +02:00

185 lines
711 KiB
JavaScript

"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
exports.id = "vendor-chunks/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76";
exports.ids = ["vendor-chunks/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76"];
exports.modules = {
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js":
/*!****************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js ***!
\****************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ UnauthorizedError: () => (/* binding */ UnauthorizedError),\n/* harmony export */ auth: () => (/* binding */ auth),\n/* harmony export */ buildDiscoveryUrls: () => (/* binding */ buildDiscoveryUrls),\n/* harmony export */ discoverAuthorizationServerMetadata: () => (/* binding */ discoverAuthorizationServerMetadata),\n/* harmony export */ discoverOAuthMetadata: () => (/* binding */ discoverOAuthMetadata),\n/* harmony export */ discoverOAuthProtectedResourceMetadata: () => (/* binding */ discoverOAuthProtectedResourceMetadata),\n/* harmony export */ discoverOAuthServerInfo: () => (/* binding */ discoverOAuthServerInfo),\n/* harmony export */ exchangeAuthorization: () => (/* binding */ exchangeAuthorization),\n/* harmony export */ extractResourceMetadataUrl: () => (/* binding */ extractResourceMetadataUrl),\n/* harmony export */ extractWWWAuthenticateParams: () => (/* binding */ extractWWWAuthenticateParams),\n/* harmony export */ fetchToken: () => (/* binding */ fetchToken),\n/* harmony export */ isHttpsUrl: () => (/* binding */ isHttpsUrl),\n/* harmony export */ parseErrorResponse: () => (/* binding */ parseErrorResponse),\n/* harmony export */ prepareAuthorizationCodeRequest: () => (/* binding */ prepareAuthorizationCodeRequest),\n/* harmony export */ refreshAuthorization: () => (/* binding */ refreshAuthorization),\n/* harmony export */ registerClient: () => (/* binding */ registerClient),\n/* harmony export */ selectClientAuthMethod: () => (/* binding */ selectClientAuthMethod),\n/* harmony export */ selectResourceURL: () => (/* binding */ selectResourceURL),\n/* harmony export */ startAuthorization: () => (/* binding */ startAuthorization)\n/* harmony export */ });\n/* harmony import */ var pkce_challenge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! pkce-challenge */ \"(rsc)/./node_modules/.pnpm/pkce-challenge@5.0.1/node_modules/pkce-challenge/dist/index.node.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../types.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js\");\n/* harmony import */ var _shared_auth_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/auth.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js\");\n/* harmony import */ var _shared_auth_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/auth-utils.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth-utils.js\");\n/* harmony import */ var _server_auth_errors_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../server/auth/errors.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/errors.js\");\n\n\n\n\n\n\nclass UnauthorizedError extends Error {\n constructor(message) {\n super(message ?? 'Unauthorized');\n }\n}\nfunction isClientAuthMethod(method) {\n return ['client_secret_basic', 'client_secret_post', 'none'].includes(method);\n}\nconst AUTHORIZATION_CODE_RESPONSE_TYPE = 'code';\nconst AUTHORIZATION_CODE_CHALLENGE_METHOD = 'S256';\n/**\n * Determines the best client authentication method to use based on server support and client configuration.\n *\n * Priority order (highest to lowest):\n * 1. client_secret_basic (if client secret is available)\n * 2. client_secret_post (if client secret is available)\n * 3. none (for public clients)\n *\n * @param clientInformation - OAuth client information containing credentials\n * @param supportedMethods - Authentication methods supported by the authorization server\n * @returns The selected authentication method\n */\nfunction selectClientAuthMethod(clientInformation, supportedMethods) {\n const hasClientSecret = clientInformation.client_secret !== undefined;\n // Prefer the method returned by the server during client registration, if valid.\n // When server metadata is present we also require the method to be listed as supported;\n // when supportedMethods is empty (metadata omitted the field) the DCR hint stands alone.\n if ('token_endpoint_auth_method' in clientInformation &&\n clientInformation.token_endpoint_auth_method &&\n isClientAuthMethod(clientInformation.token_endpoint_auth_method) &&\n (supportedMethods.length === 0 || supportedMethods.includes(clientInformation.token_endpoint_auth_method))) {\n return clientInformation.token_endpoint_auth_method;\n }\n // If server metadata omits token_endpoint_auth_methods_supported, RFC 8414 §2 says the\n // default is client_secret_basic. RFC 6749 §2.3.1 also requires servers to support HTTP\n // Basic authentication for clients with a secret, making it the safest default.\n if (supportedMethods.length === 0) {\n return hasClientSecret ? 'client_secret_basic' : 'none';\n }\n // Try methods in priority order (most secure first)\n if (hasClientSecret && supportedMethods.includes('client_secret_basic')) {\n return 'client_secret_basic';\n }\n if (hasClientSecret && supportedMethods.includes('client_secret_post')) {\n return 'client_secret_post';\n }\n if (supportedMethods.includes('none')) {\n return 'none';\n }\n // Fallback: use what we have\n return hasClientSecret ? 'client_secret_post' : 'none';\n}\n/**\n * Applies client authentication to the request based on the specified method.\n *\n * Implements OAuth 2.1 client authentication methods:\n * - client_secret_basic: HTTP Basic authentication (RFC 6749 Section 2.3.1)\n * - client_secret_post: Credentials in request body (RFC 6749 Section 2.3.1)\n * - none: Public client authentication (RFC 6749 Section 2.1)\n *\n * @param method - The authentication method to use\n * @param clientInformation - OAuth client information containing credentials\n * @param headers - HTTP headers object to modify\n * @param params - URL search parameters to modify\n * @throws {Error} When required credentials are missing\n */\nfunction applyClientAuthentication(method, clientInformation, headers, params) {\n const { client_id, client_secret } = clientInformation;\n switch (method) {\n case 'client_secret_basic':\n applyBasicAuth(client_id, client_secret, headers);\n return;\n case 'client_secret_post':\n applyPostAuth(client_id, client_secret, params);\n return;\n case 'none':\n applyPublicAuth(client_id, params);\n return;\n default:\n throw new Error(`Unsupported client authentication method: ${method}`);\n }\n}\n/**\n * Applies HTTP Basic authentication (RFC 6749 Section 2.3.1)\n */\nfunction applyBasicAuth(clientId, clientSecret, headers) {\n if (!clientSecret) {\n throw new Error('client_secret_basic authentication requires a client_secret');\n }\n const credentials = btoa(`${clientId}:${clientSecret}`);\n headers.set('Authorization', `Basic ${credentials}`);\n}\n/**\n * Applies POST body authentication (RFC 6749 Section 2.3.1)\n */\nfunction applyPostAuth(clientId, clientSecret, params) {\n params.set('client_id', clientId);\n if (clientSecret) {\n params.set('client_secret', clientSecret);\n }\n}\n/**\n * Applies public client authentication (RFC 6749 Section 2.1)\n */\nfunction applyPublicAuth(clientId, params) {\n params.set('client_id', clientId);\n}\n/**\n * Parses an OAuth error response from a string or Response object.\n *\n * If the input is a standard OAuth2.0 error response, it will be parsed according to the spec\n * and an instance of the appropriate OAuthError subclass will be returned.\n * If parsing fails, it falls back to a generic ServerError that includes\n * the response status (if available) and original content.\n *\n * @param input - A Response object or string containing the error response\n * @returns A Promise that resolves to an OAuthError instance\n */\nasync function parseErrorResponse(input) {\n const statusCode = input instanceof Response ? input.status : undefined;\n const body = input instanceof Response ? await input.text() : input;\n try {\n const result = _shared_auth_js__WEBPACK_IMPORTED_MODULE_2__.OAuthErrorResponseSchema.parse(JSON.parse(body));\n const { error, error_description, error_uri } = result;\n const errorClass = _server_auth_errors_js__WEBPACK_IMPORTED_MODULE_4__.OAUTH_ERRORS[error] || _server_auth_errors_js__WEBPACK_IMPORTED_MODULE_4__.ServerError;\n return new errorClass(error_description || '', error_uri);\n }\n catch (error) {\n // Not a valid OAuth error response, but try to inform the user of the raw data anyway\n const errorMessage = `${statusCode ? `HTTP ${statusCode}: ` : ''}Invalid OAuth error response: ${error}. Raw body: ${body}`;\n return new _server_auth_errors_js__WEBPACK_IMPORTED_MODULE_4__.ServerError(errorMessage);\n }\n}\n/**\n * Orchestrates the full auth flow with a server.\n *\n * This can be used as a single entry point for all authorization functionality,\n * instead of linking together the other lower-level functions in this module.\n */\nasync function auth(provider, options) {\n try {\n return await authInternal(provider, options);\n }\n catch (error) {\n // Handle recoverable error types by invalidating credentials and retrying\n if (error instanceof _server_auth_errors_js__WEBPACK_IMPORTED_MODULE_4__.InvalidClientError || error instanceof _server_auth_errors_js__WEBPACK_IMPORTED_MODULE_4__.UnauthorizedClientError) {\n await provider.invalidateCredentials?.('all');\n return await authInternal(provider, options);\n }\n else if (error instanceof _server_auth_errors_js__WEBPACK_IMPORTED_MODULE_4__.InvalidGrantError) {\n await provider.invalidateCredentials?.('tokens');\n return await authInternal(provider, options);\n }\n // Throw otherwise\n throw error;\n }\n}\nasync function authInternal(provider, { serverUrl, authorizationCode, scope, resourceMetadataUrl, fetchFn }) {\n // Check if the provider has cached discovery state to skip discovery\n const cachedState = await provider.discoveryState?.();\n let resourceMetadata;\n let authorizationServerUrl;\n let metadata;\n // If resourceMetadataUrl is not provided, try to load it from cached state\n // This handles browser redirects where the URL was saved before navigation\n let effectiveResourceMetadataUrl = resourceMetadataUrl;\n if (!effectiveResourceMetadataUrl && cachedState?.resourceMetadataUrl) {\n effectiveResourceMetadataUrl = new URL(cachedState.resourceMetadataUrl);\n }\n if (cachedState?.authorizationServerUrl) {\n // Restore discovery state from cache\n authorizationServerUrl = cachedState.authorizationServerUrl;\n resourceMetadata = cachedState.resourceMetadata;\n metadata =\n cachedState.authorizationServerMetadata ?? (await discoverAuthorizationServerMetadata(authorizationServerUrl, { fetchFn }));\n // If resource metadata wasn't cached, try to fetch it for selectResourceURL\n if (!resourceMetadata) {\n try {\n resourceMetadata = await discoverOAuthProtectedResourceMetadata(serverUrl, { resourceMetadataUrl: effectiveResourceMetadataUrl }, fetchFn);\n }\n catch {\n // RFC 9728 not available — selectResourceURL will handle undefined\n }\n }\n // Re-save if we enriched the cached state with missing metadata\n if (metadata !== cachedState.authorizationServerMetadata || resourceMetadata !== cachedState.resourceMetadata) {\n await provider.saveDiscoveryState?.({\n authorizationServerUrl: String(authorizationServerUrl),\n resourceMetadataUrl: effectiveResourceMetadataUrl?.toString(),\n resourceMetadata,\n authorizationServerMetadata: metadata\n });\n }\n }\n else {\n // Full discovery via RFC 9728\n const serverInfo = await discoverOAuthServerInfo(serverUrl, { resourceMetadataUrl: effectiveResourceMetadataUrl, fetchFn });\n authorizationServerUrl = serverInfo.authorizationServerUrl;\n metadata = serverInfo.authorizationServerMetadata;\n resourceMetadata = serverInfo.resourceMetadata;\n // Persist discovery state for future use\n // TODO: resourceMetadataUrl is only populated when explicitly provided via options\n // or loaded from cached state. The URL derived internally by\n // discoverOAuthProtectedResourceMetadata() is not captured back here.\n await provider.saveDiscoveryState?.({\n authorizationServerUrl: String(authorizationServerUrl),\n resourceMetadataUrl: effectiveResourceMetadataUrl?.toString(),\n resourceMetadata,\n authorizationServerMetadata: metadata\n });\n }\n const resource = await selectResourceURL(serverUrl, provider, resourceMetadata);\n // Apply scope selection strategy (SEP-835):\n // 1. WWW-Authenticate scope (passed via `scope` param)\n // 2. PRM scopes_supported\n // 3. Client metadata scope (user-configured fallback)\n // The resolved scope is used consistently for both DCR and the authorization request.\n const resolvedScope = scope || resourceMetadata?.scopes_supported?.join(' ') || provider.clientMetadata.scope;\n // Handle client registration if needed\n let clientInformation = await Promise.resolve(provider.clientInformation());\n if (!clientInformation) {\n if (authorizationCode !== undefined) {\n throw new Error('Existing OAuth client information is required when exchanging an authorization code');\n }\n const supportsUrlBasedClientId = metadata?.client_id_metadata_document_supported === true;\n const clientMetadataUrl = provider.clientMetadataUrl;\n if (clientMetadataUrl && !isHttpsUrl(clientMetadataUrl)) {\n throw new _server_auth_errors_js__WEBPACK_IMPORTED_MODULE_4__.InvalidClientMetadataError(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${clientMetadataUrl}`);\n }\n const shouldUseUrlBasedClientId = supportsUrlBasedClientId && clientMetadataUrl;\n if (shouldUseUrlBasedClientId) {\n // SEP-991: URL-based Client IDs\n clientInformation = {\n client_id: clientMetadataUrl\n };\n await provider.saveClientInformation?.(clientInformation);\n }\n else {\n // Fallback to dynamic registration\n if (!provider.saveClientInformation) {\n throw new Error('OAuth client information must be saveable for dynamic registration');\n }\n const fullInformation = await registerClient(authorizationServerUrl, {\n metadata,\n clientMetadata: provider.clientMetadata,\n scope: resolvedScope,\n fetchFn\n });\n await provider.saveClientInformation(fullInformation);\n clientInformation = fullInformation;\n }\n }\n // Non-interactive flows (e.g., client_credentials, jwt-bearer) don't need a redirect URL\n const nonInteractiveFlow = !provider.redirectUrl;\n // Exchange authorization code for tokens, or fetch tokens directly for non-interactive flows\n if (authorizationCode !== undefined || nonInteractiveFlow) {\n const tokens = await fetchToken(provider, authorizationServerUrl, {\n metadata,\n resource,\n authorizationCode,\n fetchFn\n });\n await provider.saveTokens(tokens);\n return 'AUTHORIZED';\n }\n const tokens = await provider.tokens();\n // Handle token refresh or new authorization\n if (tokens?.refresh_token) {\n try {\n // Attempt to refresh the token\n const newTokens = await refreshAuthorization(authorizationServerUrl, {\n metadata,\n clientInformation,\n refreshToken: tokens.refresh_token,\n resource,\n addClientAuthentication: provider.addClientAuthentication,\n fetchFn\n });\n await provider.saveTokens(newTokens);\n return 'AUTHORIZED';\n }\n catch (error) {\n // If this is a ServerError, or an unknown type, log it out and try to continue. Otherwise, escalate so we can fix things and retry.\n if (!(error instanceof _server_auth_errors_js__WEBPACK_IMPORTED_MODULE_4__.OAuthError) || error instanceof _server_auth_errors_js__WEBPACK_IMPORTED_MODULE_4__.ServerError) {\n // Could not refresh OAuth tokens\n }\n else {\n // Refresh failed for another reason, re-throw\n throw error;\n }\n }\n }\n const state = provider.state ? await provider.state() : undefined;\n // Start new authorization flow\n const { authorizationUrl, codeVerifier } = await startAuthorization(authorizationServerUrl, {\n metadata,\n clientInformation,\n state,\n redirectUrl: provider.redirectUrl,\n scope: resolvedScope,\n resource\n });\n await provider.saveCodeVerifier(codeVerifier);\n await provider.redirectToAuthorization(authorizationUrl);\n return 'REDIRECT';\n}\n/**\n * SEP-991: URL-based Client IDs\n * Validate that the client_id is a valid URL with https scheme\n */\nfunction isHttpsUrl(value) {\n if (!value)\n return false;\n try {\n const url = new URL(value);\n return url.protocol === 'https:' && url.pathname !== '/';\n }\n catch {\n return false;\n }\n}\nasync function selectResourceURL(serverUrl, provider, resourceMetadata) {\n const defaultResource = (0,_shared_auth_utils_js__WEBPACK_IMPORTED_MODULE_3__.resourceUrlFromServerUrl)(serverUrl);\n // If provider has custom validation, delegate to it\n if (provider.validateResourceURL) {\n return await provider.validateResourceURL(defaultResource, resourceMetadata?.resource);\n }\n // Only include resource parameter when Protected Resource Metadata is present\n if (!resourceMetadata) {\n return undefined;\n }\n // Validate that the metadata's resource is compatible with our request\n if (!(0,_shared_auth_utils_js__WEBPACK_IMPORTED_MODULE_3__.checkResourceAllowed)({ requestedResource: defaultResource, configuredResource: resourceMetadata.resource })) {\n throw new Error(`Protected resource ${resourceMetadata.resource} does not match expected ${defaultResource} (or origin)`);\n }\n // Prefer the resource from metadata since it's what the server is telling us to request\n return new URL(resourceMetadata.resource);\n}\n/**\n * Extract resource_metadata, scope, and error from WWW-Authenticate header.\n */\nfunction extractWWWAuthenticateParams(res) {\n const authenticateHeader = res.headers.get('WWW-Authenticate');\n if (!authenticateHeader) {\n return {};\n }\n const [type, scheme] = authenticateHeader.split(' ');\n if (type.toLowerCase() !== 'bearer' || !scheme) {\n return {};\n }\n const resourceMetadataMatch = extractFieldFromWwwAuth(res, 'resource_metadata') || undefined;\n let resourceMetadataUrl;\n if (resourceMetadataMatch) {\n try {\n resourceMetadataUrl = new URL(resourceMetadataMatch);\n }\n catch {\n // Ignore invalid URL\n }\n }\n const scope = extractFieldFromWwwAuth(res, 'scope') || undefined;\n const error = extractFieldFromWwwAuth(res, 'error') || undefined;\n return {\n resourceMetadataUrl,\n scope,\n error\n };\n}\n/**\n * Extracts a specific field's value from the WWW-Authenticate header string.\n *\n * @param response The HTTP response object containing the headers.\n * @param fieldName The name of the field to extract (e.g., \"realm\", \"nonce\").\n * @returns The field value\n */\nfunction extractFieldFromWwwAuth(response, fieldName) {\n const wwwAuthHeader = response.headers.get('WWW-Authenticate');\n if (!wwwAuthHeader) {\n return null;\n }\n const pattern = new RegExp(`${fieldName}=(?:\"([^\"]+)\"|([^\\\\s,]+))`);\n const match = wwwAuthHeader.match(pattern);\n if (match) {\n // Pattern matches: field_name=\"value\" or field_name=value (unquoted)\n return match[1] || match[2];\n }\n return null;\n}\n/**\n * Extract resource_metadata from response header.\n * @deprecated Use `extractWWWAuthenticateParams` instead.\n */\nfunction extractResourceMetadataUrl(res) {\n const authenticateHeader = res.headers.get('WWW-Authenticate');\n if (!authenticateHeader) {\n return undefined;\n }\n const [type, scheme] = authenticateHeader.split(' ');\n if (type.toLowerCase() !== 'bearer' || !scheme) {\n return undefined;\n }\n const regex = /resource_metadata=\"([^\"]*)\"/;\n const match = regex.exec(authenticateHeader);\n if (!match) {\n return undefined;\n }\n try {\n return new URL(match[1]);\n }\n catch {\n return undefined;\n }\n}\n/**\n * Looks up RFC 9728 OAuth 2.0 Protected Resource Metadata.\n *\n * If the server returns a 404 for the well-known endpoint, this function will\n * return `undefined`. Any other errors will be thrown as exceptions.\n */\nasync function discoverOAuthProtectedResourceMetadata(serverUrl, opts, fetchFn = fetch) {\n const response = await discoverMetadataWithFallback(serverUrl, 'oauth-protected-resource', fetchFn, {\n protocolVersion: opts?.protocolVersion,\n metadataUrl: opts?.resourceMetadataUrl\n });\n if (!response || response.status === 404) {\n await response?.body?.cancel();\n throw new Error(`Resource server does not implement OAuth 2.0 Protected Resource Metadata.`);\n }\n if (!response.ok) {\n await response.body?.cancel();\n throw new Error(`HTTP ${response.status} trying to load well-known OAuth protected resource metadata.`);\n }\n return _shared_auth_js__WEBPACK_IMPORTED_MODULE_2__.OAuthProtectedResourceMetadataSchema.parse(await response.json());\n}\n/**\n * Helper function to handle fetch with CORS retry logic\n */\nasync function fetchWithCorsRetry(url, headers, fetchFn = fetch) {\n try {\n return await fetchFn(url, { headers });\n }\n catch (error) {\n if (error instanceof TypeError) {\n if (headers) {\n // CORS errors come back as TypeError, retry without headers\n return fetchWithCorsRetry(url, undefined, fetchFn);\n }\n else {\n // We're getting CORS errors on retry too, return undefined\n return undefined;\n }\n }\n throw error;\n }\n}\n/**\n * Constructs the well-known path for auth-related metadata discovery\n */\nfunction buildWellKnownPath(wellKnownPrefix, pathname = '', options = {}) {\n // Strip trailing slash from pathname to avoid double slashes\n if (pathname.endsWith('/')) {\n pathname = pathname.slice(0, -1);\n }\n return options.prependPathname ? `${pathname}/.well-known/${wellKnownPrefix}` : `/.well-known/${wellKnownPrefix}${pathname}`;\n}\n/**\n * Tries to discover OAuth metadata at a specific URL\n */\nasync function tryMetadataDiscovery(url, protocolVersion, fetchFn = fetch) {\n const headers = {\n 'MCP-Protocol-Version': protocolVersion\n };\n return await fetchWithCorsRetry(url, headers, fetchFn);\n}\n/**\n * Determines if fallback to root discovery should be attempted\n */\nfunction shouldAttemptFallback(response, pathname) {\n return !response || (response.status >= 400 && response.status < 500 && pathname !== '/');\n}\n/**\n * Generic function for discovering OAuth metadata with fallback support\n */\nasync function discoverMetadataWithFallback(serverUrl, wellKnownType, fetchFn, opts) {\n const issuer = new URL(serverUrl);\n const protocolVersion = opts?.protocolVersion ?? _types_js__WEBPACK_IMPORTED_MODULE_1__.LATEST_PROTOCOL_VERSION;\n let url;\n if (opts?.metadataUrl) {\n url = new URL(opts.metadataUrl);\n }\n else {\n // Try path-aware discovery first\n const wellKnownPath = buildWellKnownPath(wellKnownType, issuer.pathname);\n url = new URL(wellKnownPath, opts?.metadataServerUrl ?? issuer);\n url.search = issuer.search;\n }\n let response = await tryMetadataDiscovery(url, protocolVersion, fetchFn);\n // If path-aware discovery fails with 404 and we're not already at root, try fallback to root discovery\n if (!opts?.metadataUrl && shouldAttemptFallback(response, issuer.pathname)) {\n const rootUrl = new URL(`/.well-known/${wellKnownType}`, issuer);\n response = await tryMetadataDiscovery(rootUrl, protocolVersion, fetchFn);\n }\n return response;\n}\n/**\n * Looks up RFC 8414 OAuth 2.0 Authorization Server Metadata.\n *\n * If the server returns a 404 for the well-known endpoint, this function will\n * return `undefined`. Any other errors will be thrown as exceptions.\n *\n * @deprecated This function is deprecated in favor of `discoverAuthorizationServerMetadata`.\n */\nasync function discoverOAuthMetadata(issuer, { authorizationServerUrl, protocolVersion } = {}, fetchFn = fetch) {\n if (typeof issuer === 'string') {\n issuer = new URL(issuer);\n }\n if (!authorizationServerUrl) {\n authorizationServerUrl = issuer;\n }\n if (typeof authorizationServerUrl === 'string') {\n authorizationServerUrl = new URL(authorizationServerUrl);\n }\n protocolVersion ?? (protocolVersion = _types_js__WEBPACK_IMPORTED_MODULE_1__.LATEST_PROTOCOL_VERSION);\n const response = await discoverMetadataWithFallback(authorizationServerUrl, 'oauth-authorization-server', fetchFn, {\n protocolVersion,\n metadataServerUrl: authorizationServerUrl\n });\n if (!response || response.status === 404) {\n await response?.body?.cancel();\n return undefined;\n }\n if (!response.ok) {\n await response.body?.cancel();\n throw new Error(`HTTP ${response.status} trying to load well-known OAuth metadata`);\n }\n return _shared_auth_js__WEBPACK_IMPORTED_MODULE_2__.OAuthMetadataSchema.parse(await response.json());\n}\n/**\n * Builds a list of discovery URLs to try for authorization server metadata.\n * URLs are returned in priority order:\n * 1. OAuth metadata at the given URL\n * 2. OIDC metadata endpoints at the given URL\n */\nfunction buildDiscoveryUrls(authorizationServerUrl) {\n const url = typeof authorizationServerUrl === 'string' ? new URL(authorizationServerUrl) : authorizationServerUrl;\n const hasPath = url.pathname !== '/';\n const urlsToTry = [];\n if (!hasPath) {\n // Root path: https://example.com/.well-known/oauth-authorization-server\n urlsToTry.push({\n url: new URL('/.well-known/oauth-authorization-server', url.origin),\n type: 'oauth'\n });\n // OIDC: https://example.com/.well-known/openid-configuration\n urlsToTry.push({\n url: new URL(`/.well-known/openid-configuration`, url.origin),\n type: 'oidc'\n });\n return urlsToTry;\n }\n // Strip trailing slash from pathname to avoid double slashes\n let pathname = url.pathname;\n if (pathname.endsWith('/')) {\n pathname = pathname.slice(0, -1);\n }\n // 1. OAuth metadata at the given URL\n // Insert well-known before the path: https://example.com/.well-known/oauth-authorization-server/tenant1\n urlsToTry.push({\n url: new URL(`/.well-known/oauth-authorization-server${pathname}`, url.origin),\n type: 'oauth'\n });\n // 2. OIDC metadata endpoints\n // RFC 8414 style: Insert /.well-known/openid-configuration before the path\n urlsToTry.push({\n url: new URL(`/.well-known/openid-configuration${pathname}`, url.origin),\n type: 'oidc'\n });\n // OIDC Discovery 1.0 style: Append /.well-known/openid-configuration after the path\n urlsToTry.push({\n url: new URL(`${pathname}/.well-known/openid-configuration`, url.origin),\n type: 'oidc'\n });\n return urlsToTry;\n}\n/**\n * Discovers authorization server metadata with support for RFC 8414 OAuth 2.0 Authorization Server Metadata\n * and OpenID Connect Discovery 1.0 specifications.\n *\n * This function implements a fallback strategy for authorization server discovery:\n * 1. Attempts RFC 8414 OAuth metadata discovery first\n * 2. If OAuth discovery fails, falls back to OpenID Connect Discovery\n *\n * @param authorizationServerUrl - The authorization server URL obtained from the MCP Server's\n * protected resource metadata, or the MCP server's URL if the\n * metadata was not found.\n * @param options - Configuration options\n * @param options.fetchFn - Optional fetch function for making HTTP requests, defaults to global fetch\n * @param options.protocolVersion - MCP protocol version to use, defaults to LATEST_PROTOCOL_VERSION\n * @returns Promise resolving to authorization server metadata, or undefined if discovery fails\n */\nasync function discoverAuthorizationServerMetadata(authorizationServerUrl, { fetchFn = fetch, protocolVersion = _types_js__WEBPACK_IMPORTED_MODULE_1__.LATEST_PROTOCOL_VERSION } = {}) {\n const headers = {\n 'MCP-Protocol-Version': protocolVersion,\n Accept: 'application/json'\n };\n // Get the list of URLs to try\n const urlsToTry = buildDiscoveryUrls(authorizationServerUrl);\n // Try each URL in order\n for (const { url: endpointUrl, type } of urlsToTry) {\n const response = await fetchWithCorsRetry(endpointUrl, headers, fetchFn);\n if (!response) {\n /**\n * CORS error occurred - don't throw as the endpoint may not allow CORS,\n * continue trying other possible endpoints\n */\n continue;\n }\n if (!response.ok) {\n await response.body?.cancel();\n // Continue looking for any 4xx response code.\n if (response.status >= 400 && response.status < 500) {\n continue; // Try next URL\n }\n throw new Error(`HTTP ${response.status} trying to load ${type === 'oauth' ? 'OAuth' : 'OpenID provider'} metadata from ${endpointUrl}`);\n }\n // Parse and validate based on type\n if (type === 'oauth') {\n return _shared_auth_js__WEBPACK_IMPORTED_MODULE_2__.OAuthMetadataSchema.parse(await response.json());\n }\n else {\n return _shared_auth_js__WEBPACK_IMPORTED_MODULE_2__.OpenIdProviderDiscoveryMetadataSchema.parse(await response.json());\n }\n }\n return undefined;\n}\n/**\n * Discovers the authorization server for an MCP server following\n * {@link https://datatracker.ietf.org/doc/html/rfc9728 | RFC 9728} (OAuth 2.0 Protected\n * Resource Metadata), with fallback to treating the server URL as the\n * authorization server.\n *\n * This function combines two discovery steps into one call:\n * 1. Probes `/.well-known/oauth-protected-resource` on the MCP server to find the\n * authorization server URL (RFC 9728).\n * 2. Fetches authorization server metadata from that URL (RFC 8414 / OpenID Connect Discovery).\n *\n * Use this when you need the authorization server metadata for operations outside the\n * {@linkcode auth} orchestrator, such as token refresh or token revocation.\n *\n * @param serverUrl - The MCP resource server URL\n * @param opts - Optional configuration\n * @param opts.resourceMetadataUrl - Override URL for the protected resource metadata endpoint\n * @param opts.fetchFn - Custom fetch function for HTTP requests\n * @returns Authorization server URL, metadata, and resource metadata (if available)\n */\nasync function discoverOAuthServerInfo(serverUrl, opts) {\n let resourceMetadata;\n let authorizationServerUrl;\n try {\n resourceMetadata = await discoverOAuthProtectedResourceMetadata(serverUrl, { resourceMetadataUrl: opts?.resourceMetadataUrl }, opts?.fetchFn);\n if (resourceMetadata.authorization_servers && resourceMetadata.authorization_servers.length > 0) {\n authorizationServerUrl = resourceMetadata.authorization_servers[0];\n }\n }\n catch {\n // RFC 9728 not supported -- fall back to treating the server URL as the authorization server\n }\n // If we don't get a valid authorization server from protected resource metadata,\n // fall back to the legacy MCP spec behavior: MCP server base URL acts as the authorization server\n if (!authorizationServerUrl) {\n authorizationServerUrl = String(new URL('/', serverUrl));\n }\n const authorizationServerMetadata = await discoverAuthorizationServerMetadata(authorizationServerUrl, { fetchFn: opts?.fetchFn });\n return {\n authorizationServerUrl,\n authorizationServerMetadata,\n resourceMetadata\n };\n}\n/**\n * Begins the authorization flow with the given server, by generating a PKCE challenge and constructing the authorization URL.\n */\nasync function startAuthorization(authorizationServerUrl, { metadata, clientInformation, redirectUrl, scope, state, resource }) {\n let authorizationUrl;\n if (metadata) {\n authorizationUrl = new URL(metadata.authorization_endpoint);\n if (!metadata.response_types_supported.includes(AUTHORIZATION_CODE_RESPONSE_TYPE)) {\n throw new Error(`Incompatible auth server: does not support response type ${AUTHORIZATION_CODE_RESPONSE_TYPE}`);\n }\n if (metadata.code_challenge_methods_supported &&\n !metadata.code_challenge_methods_supported.includes(AUTHORIZATION_CODE_CHALLENGE_METHOD)) {\n throw new Error(`Incompatible auth server: does not support code challenge method ${AUTHORIZATION_CODE_CHALLENGE_METHOD}`);\n }\n }\n else {\n authorizationUrl = new URL('/authorize', authorizationServerUrl);\n }\n // Generate PKCE challenge\n const challenge = await (0,pkce_challenge__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n const codeVerifier = challenge.code_verifier;\n const codeChallenge = challenge.code_challenge;\n authorizationUrl.searchParams.set('response_type', AUTHORIZATION_CODE_RESPONSE_TYPE);\n authorizationUrl.searchParams.set('client_id', clientInformation.client_id);\n authorizationUrl.searchParams.set('code_challenge', codeChallenge);\n authorizationUrl.searchParams.set('code_challenge_method', AUTHORIZATION_CODE_CHALLENGE_METHOD);\n authorizationUrl.searchParams.set('redirect_uri', String(redirectUrl));\n if (state) {\n authorizationUrl.searchParams.set('state', state);\n }\n if (scope) {\n authorizationUrl.searchParams.set('scope', scope);\n }\n if (scope?.includes('offline_access')) {\n // if the request includes the OIDC-only \"offline_access\" scope,\n // we need to set the prompt to \"consent\" to ensure the user is prompted to grant offline access\n // https://openid.net/specs/openid-connect-core-1_0.html#OfflineAccess\n authorizationUrl.searchParams.append('prompt', 'consent');\n }\n if (resource) {\n authorizationUrl.searchParams.set('resource', resource.href);\n }\n return { authorizationUrl, codeVerifier };\n}\n/**\n * Prepares token request parameters for an authorization code exchange.\n *\n * This is the default implementation used by fetchToken when the provider\n * doesn't implement prepareTokenRequest.\n *\n * @param authorizationCode - The authorization code received from the authorization endpoint\n * @param codeVerifier - The PKCE code verifier\n * @param redirectUri - The redirect URI used in the authorization request\n * @returns URLSearchParams for the authorization_code grant\n */\nfunction prepareAuthorizationCodeRequest(authorizationCode, codeVerifier, redirectUri) {\n return new URLSearchParams({\n grant_type: 'authorization_code',\n code: authorizationCode,\n code_verifier: codeVerifier,\n redirect_uri: String(redirectUri)\n });\n}\n/**\n * Internal helper to execute a token request with the given parameters.\n * Used by exchangeAuthorization, refreshAuthorization, and fetchToken.\n */\nasync function executeTokenRequest(authorizationServerUrl, { metadata, tokenRequestParams, clientInformation, addClientAuthentication, resource, fetchFn }) {\n const tokenUrl = metadata?.token_endpoint ? new URL(metadata.token_endpoint) : new URL('/token', authorizationServerUrl);\n const headers = new Headers({\n 'Content-Type': 'application/x-www-form-urlencoded',\n Accept: 'application/json'\n });\n if (resource) {\n tokenRequestParams.set('resource', resource.href);\n }\n if (addClientAuthentication) {\n await addClientAuthentication(headers, tokenRequestParams, tokenUrl, metadata);\n }\n else if (clientInformation) {\n const supportedMethods = metadata?.token_endpoint_auth_methods_supported ?? [];\n const authMethod = selectClientAuthMethod(clientInformation, supportedMethods);\n applyClientAuthentication(authMethod, clientInformation, headers, tokenRequestParams);\n }\n const response = await (fetchFn ?? fetch)(tokenUrl, {\n method: 'POST',\n headers,\n body: tokenRequestParams\n });\n if (!response.ok) {\n throw await parseErrorResponse(response);\n }\n return _shared_auth_js__WEBPACK_IMPORTED_MODULE_2__.OAuthTokensSchema.parse(await response.json());\n}\n/**\n * Exchanges an authorization code for an access token with the given server.\n *\n * Supports multiple client authentication methods as specified in OAuth 2.1:\n * - Automatically selects the best authentication method based on server support\n * - Falls back to appropriate defaults when server metadata is unavailable\n *\n * @param authorizationServerUrl - The authorization server's base URL\n * @param options - Configuration object containing client info, auth code, etc.\n * @returns Promise resolving to OAuth tokens\n * @throws {Error} When token exchange fails or authentication is invalid\n */\nasync function exchangeAuthorization(authorizationServerUrl, { metadata, clientInformation, authorizationCode, codeVerifier, redirectUri, resource, addClientAuthentication, fetchFn }) {\n const tokenRequestParams = prepareAuthorizationCodeRequest(authorizationCode, codeVerifier, redirectUri);\n return executeTokenRequest(authorizationServerUrl, {\n metadata,\n tokenRequestParams,\n clientInformation,\n addClientAuthentication,\n resource,\n fetchFn\n });\n}\n/**\n * Exchange a refresh token for an updated access token.\n *\n * Supports multiple client authentication methods as specified in OAuth 2.1:\n * - Automatically selects the best authentication method based on server support\n * - Preserves the original refresh token if a new one is not returned\n *\n * @param authorizationServerUrl - The authorization server's base URL\n * @param options - Configuration object containing client info, refresh token, etc.\n * @returns Promise resolving to OAuth tokens (preserves original refresh_token if not replaced)\n * @throws {Error} When token refresh fails or authentication is invalid\n */\nasync function refreshAuthorization(authorizationServerUrl, { metadata, clientInformation, refreshToken, resource, addClientAuthentication, fetchFn }) {\n const tokenRequestParams = new URLSearchParams({\n grant_type: 'refresh_token',\n refresh_token: refreshToken\n });\n const tokens = await executeTokenRequest(authorizationServerUrl, {\n metadata,\n tokenRequestParams,\n clientInformation,\n addClientAuthentication,\n resource,\n fetchFn\n });\n // Preserve original refresh token if server didn't return a new one\n return { refresh_token: refreshToken, ...tokens };\n}\n/**\n * Unified token fetching that works with any grant type via provider.prepareTokenRequest().\n *\n * This function provides a single entry point for obtaining tokens regardless of the\n * OAuth grant type. The provider's prepareTokenRequest() method determines which grant\n * to use and supplies the grant-specific parameters.\n *\n * @param provider - OAuth client provider that implements prepareTokenRequest()\n * @param authorizationServerUrl - The authorization server's base URL\n * @param options - Configuration for the token request\n * @returns Promise resolving to OAuth tokens\n * @throws {Error} When provider doesn't implement prepareTokenRequest or token fetch fails\n *\n * @example\n * // Provider for client_credentials:\n * class MyProvider implements OAuthClientProvider {\n * prepareTokenRequest(scope) {\n * const params = new URLSearchParams({ grant_type: 'client_credentials' });\n * if (scope) params.set('scope', scope);\n * return params;\n * }\n * // ... other methods\n * }\n *\n * const tokens = await fetchToken(provider, authServerUrl, { metadata });\n */\nasync function fetchToken(provider, authorizationServerUrl, { metadata, resource, authorizationCode, fetchFn } = {}) {\n const scope = provider.clientMetadata.scope;\n // Use provider's prepareTokenRequest if available, otherwise fall back to authorization_code\n let tokenRequestParams;\n if (provider.prepareTokenRequest) {\n tokenRequestParams = await provider.prepareTokenRequest(scope);\n }\n // Default to authorization_code grant if no custom prepareTokenRequest\n if (!tokenRequestParams) {\n if (!authorizationCode) {\n throw new Error('Either provider.prepareTokenRequest() or authorizationCode is required');\n }\n if (!provider.redirectUrl) {\n throw new Error('redirectUrl is required for authorization_code flow');\n }\n const codeVerifier = await provider.codeVerifier();\n tokenRequestParams = prepareAuthorizationCodeRequest(authorizationCode, codeVerifier, provider.redirectUrl);\n }\n const clientInformation = await provider.clientInformation();\n return executeTokenRequest(authorizationServerUrl, {\n metadata,\n tokenRequestParams,\n clientInformation: clientInformation ?? undefined,\n addClientAuthentication: provider.addClientAuthentication,\n resource,\n fetchFn\n });\n}\n/**\n * Performs OAuth 2.0 Dynamic Client Registration according to RFC 7591.\n *\n * If `scope` is provided, it overrides `clientMetadata.scope` in the registration\n * request body. This allows callers to apply the Scope Selection Strategy (SEP-835)\n * consistently across both DCR and the subsequent authorization request.\n */\nasync function registerClient(authorizationServerUrl, { metadata, clientMetadata, scope, fetchFn }) {\n let registrationUrl;\n if (metadata) {\n if (!metadata.registration_endpoint) {\n throw new Error('Incompatible auth server: does not support dynamic client registration');\n }\n registrationUrl = new URL(metadata.registration_endpoint);\n }\n else {\n registrationUrl = new URL('/register', authorizationServerUrl);\n }\n const response = await (fetchFn ?? fetch)(registrationUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n ...clientMetadata,\n ...(scope !== undefined ? { scope } : {})\n })\n });\n if (!response.ok) {\n throw await parseErrorResponse(response);\n }\n return _shared_auth_js__WEBPACK_IMPORTED_MODULE_2__.OAuthClientInformationFullSchema.parse(await response.json());\n}\n//# sourceMappingURL=auth.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vY2xpZW50L2F1dGguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQTJDO0FBQ1c7QUFDOEM7QUFDK0M7QUFDMUQ7QUFDb0Y7QUFDdEs7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5RUFBeUUsT0FBTztBQUNoRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsU0FBUyxHQUFHLGFBQWE7QUFDekQsMENBQTBDLFlBQVk7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsa0NBQWtDO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCxVQUFVO0FBQ3hFO0FBQ08sOERBQThELGlEQUFpRCxJQUFJO0FBQzFIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyx3REFBd0QsMENBQTBDO0FBQ3pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHdDQUF3QyxRQUFRLElBQUk7QUFDcEQsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxXQUFXLDZFQUFnQztBQUMzQztBQUNBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0Btb2RlbGNvbnRleHRwcm90b2NvbCtzZGtAMS4yOS4wX3pvZEAzLjI1Ljc2L25vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2Rpc3QvZXNtL2NsaWVudC9hdXRoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwa2NlQ2hhbGxlbmdlIGZyb20gJ3BrY2UtY2hhbGxlbmdlJztcbmltcG9ydCB7IExBVEVTVF9QUk9UT0NPTF9WRVJTSU9OIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgT0F1dGhFcnJvclJlc3BvbnNlU2NoZW1hLCBPcGVuSWRQcm92aWRlckRpc2NvdmVyeU1ldGFkYXRhU2NoZW1hIH0gZnJvbSAnLi4vc2hhcmVkL2F1dGguanMnO1xuaW1wb3J0IHsgT0F1dGhDbGllbnRJbmZvcm1hdGlvbkZ1bGxTY2hlbWEsIE9BdXRoTWV0YWRhdGFTY2hlbWEsIE9BdXRoUHJvdGVjdGVkUmVzb3VyY2VNZXRhZGF0YVNjaGVtYSwgT0F1dGhUb2tlbnNTY2hlbWEgfSBmcm9tICcuLi9zaGFyZWQvYXV0aC5qcyc7XG5pbXBvcnQgeyBjaGVja1Jlc291cmNlQWxsb3dlZCwgcmVzb3VyY2VVcmxGcm9tU2VydmVyVXJsIH0gZnJvbSAnLi4vc2hhcmVkL2F1dGgtdXRpbHMuanMnO1xuaW1wb3J0IHsgSW52YWxpZENsaWVudEVycm9yLCBJbnZhbGlkQ2xpZW50TWV0YWRhdGFFcnJvciwgSW52YWxpZEdyYW50RXJyb3IsIE9BVVRIX0VSUk9SUywgT0F1dGhFcnJvciwgU2VydmVyRXJyb3IsIFVuYXV0aG9yaXplZENsaWVudEVycm9yIH0gZnJvbSAnLi4vc2VydmVyL2F1dGgvZXJyb3JzLmpzJztcbmV4cG9ydCBjbGFzcyBVbmF1dGhvcml6ZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UgPz8gJ1VuYXV0aG9yaXplZCcpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzQ2xpZW50QXV0aE1ldGhvZChtZXRob2QpIHtcbiAgICByZXR1cm4gWydjbGllbnRfc2VjcmV0X2Jhc2ljJywgJ2NsaWVudF9zZWNyZXRfcG9zdCcsICdub25lJ10uaW5jbHVkZXMobWV0aG9kKTtcbn1cbmNvbnN0IEFVVEhPUklaQVRJT05fQ09ERV9SRVNQT05TRV9UWVBFID0gJ2NvZGUnO1xuY29uc3QgQVVUSE9SSVpBVElPTl9DT0RFX0NIQUxMRU5HRV9NRVRIT0QgPSAnUzI1Nic7XG4vKipcbiAqIERldGVybWluZXMgdGhlIGJlc3QgY2xpZW50IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB0byB1c2UgYmFzZWQgb24gc2VydmVyIHN1cHBvcnQgYW5kIGNsaWVudCBjb25maWd1cmF0aW9uLlxuICpcbiAqIFByaW9yaXR5IG9yZGVyIChoaWdoZXN0IHRvIGxvd2VzdCk6XG4gKiAxLiBjbGllbnRfc2VjcmV0X2Jhc2ljIChpZiBjbGllbnQgc2VjcmV0IGlzIGF2YWlsYWJsZSlcbiAqIDIuIGNsaWVudF9zZWNyZXRfcG9zdCAoaWYgY2xpZW50IHNlY3JldCBpcyBhdmFpbGFibGUpXG4gKiAzLiBub25lIChmb3IgcHVibGljIGNsaWVudHMpXG4gKlxuICogQHBhcmFtIGNsaWVudEluZm9ybWF0aW9uIC0gT0F1dGggY2xpZW50IGluZm9ybWF0aW9uIGNvbnRhaW5pbmcgY3JlZGVudGlhbHNcbiAqIEBwYXJhbSBzdXBwb3J0ZWRNZXRob2RzIC0gQXV0aGVudGljYXRpb24gbWV0aG9kcyBzdXBwb3J0ZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyXG4gKiBAcmV0dXJucyBUaGUgc2VsZWN0ZWQgYXV0aGVudGljYXRpb24gbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RDbGllbnRBdXRoTWV0aG9kKGNsaWVudEluZm9ybWF0aW9uLCBzdXBwb3J0ZWRNZXRob2RzKSB7XG4gICAgY29uc3QgaGFzQ2xpZW50U2VjcmV0ID0gY2xpZW50SW5mb3JtYXRpb24uY2xpZW50X3NlY3JldCAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIFByZWZlciB0aGUgbWV0aG9kIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIgZHVyaW5nIGNsaWVudCByZWdpc3RyYXRpb24sIGlmIHZhbGlkLlxuICAgIC8vIFdoZW4gc2VydmVyIG1ldGFkYXRhIGlzIHByZXNlbnQgd2UgYWxzbyByZXF1aXJlIHRoZSBtZXRob2QgdG8gYmUgbGlzdGVkIGFzIHN1cHBvcnRlZDtcbiAgICAvLyB3aGVuIHN1cHBvcnRlZE1ldGhvZHMgaXMgZW1wdHkgKG1ldGFkYXRhIG9taXR0ZWQgdGhlIGZpZWxkKSB0aGUgRENSIGhpbnQgc3RhbmRzIGFsb25lLlxuICAgIGlmICgndG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2QnIGluIGNsaWVudEluZm9ybWF0aW9uICYmXG4gICAgICAgIGNsaWVudEluZm9ybWF0aW9uLnRva2VuX2VuZHBvaW50X2F1dGhfbWV0aG9kICYmXG4gICAgICAgIGlzQ2xpZW50QXV0aE1ldGhvZChjbGllbnRJbmZvcm1hdGlvbi50b2tlbl9lbmRwb2ludF9hdXRoX21ldGhvZCkgJiZcbiAgICAgICAgKHN1cHBvcnRlZE1ldGhvZHMubGVuZ3RoID09PSAwIHx8IHN1cHBvcnRlZE1ldGhvZHMuaW5jbHVkZXMoY2xpZW50SW5mb3JtYXRpb24udG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2QpKSkge1xuICAgICAgICByZXR1cm4gY2xpZW50SW5mb3JtYXRpb24udG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2Q7XG4gICAgfVxuICAgIC8vIElmIHNlcnZlciBtZXRhZGF0YSBvbWl0cyB0b2tlbl9lbmRwb2ludF9hdXRoX21ldGhvZHNfc3VwcG9ydGVkLCBSRkMgODQxNCDCpzIgc2F5cyB0aGVcbiAgICAvLyBkZWZhdWx0IGlzIGNsaWVudF9zZWNyZXRfYmFzaWMuIFJGQyA2NzQ5IMKnMi4zLjEgYWxzbyByZXF1aXJlcyBzZXJ2ZXJzIHRvIHN1cHBvcnQgSFRUUFxuICAgIC8vIEJhc2ljIGF1dGhlbnRpY2F0aW9uIGZvciBjbGllbnRzIHdpdGggYSBzZWNyZXQsIG1ha2luZyBpdCB0aGUgc2FmZXN0IGRlZmF1bHQuXG4gICAgaWYgKHN1cHBvcnRlZE1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBoYXNDbGllbnRTZWNyZXQgPyAnY2xpZW50X3NlY3JldF9iYXNpYycgOiAnbm9uZSc7XG4gICAgfVxuICAgIC8vIFRyeSBtZXRob2RzIGluIHByaW9yaXR5IG9yZGVyIChtb3N0IHNlY3VyZSBmaXJzdClcbiAgICBpZiAoaGFzQ2xpZW50U2VjcmV0ICYmIHN1cHBvcnRlZE1ldGhvZHMuaW5jbHVkZXMoJ2NsaWVudF9zZWNyZXRfYmFzaWMnKSkge1xuICAgICAgICByZXR1cm4gJ2NsaWVudF9zZWNyZXRfYmFzaWMnO1xuICAgIH1cbiAgICBpZiAoaGFzQ2xpZW50U2VjcmV0ICYmIHN1cHBvcnRlZE1ldGhvZHMuaW5jbHVkZXMoJ2NsaWVudF9zZWNyZXRfcG9zdCcpKSB7XG4gICAgICAgIHJldHVybiAnY2xpZW50X3NlY3JldF9wb3N0JztcbiAgICB9XG4gICAgaWYgKHN1cHBvcnRlZE1ldGhvZHMuaW5jbHVkZXMoJ25vbmUnKSkge1xuICAgICAgICByZXR1cm4gJ25vbmUnO1xuICAgIH1cbiAgICAvLyBGYWxsYmFjazogdXNlIHdoYXQgd2UgaGF2ZVxuICAgIHJldHVybiBoYXNDbGllbnRTZWNyZXQgPyAnY2xpZW50X3NlY3JldF9wb3N0JyA6ICdub25lJztcbn1cbi8qKlxuICogQXBwbGllcyBjbGllbnQgYXV0aGVudGljYXRpb24gdG8gdGhlIHJlcXVlc3QgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBtZXRob2QuXG4gKlxuICogSW1wbGVtZW50cyBPQXV0aCAyLjEgY2xpZW50IGF1dGhlbnRpY2F0aW9uIG1ldGhvZHM6XG4gKiAtIGNsaWVudF9zZWNyZXRfYmFzaWM6IEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24gKFJGQyA2NzQ5IFNlY3Rpb24gMi4zLjEpXG4gKiAtIGNsaWVudF9zZWNyZXRfcG9zdDogQ3JlZGVudGlhbHMgaW4gcmVxdWVzdCBib2R5IChSRkMgNjc0OSBTZWN0aW9uIDIuMy4xKVxuICogLSBub25lOiBQdWJsaWMgY2xpZW50IGF1dGhlbnRpY2F0aW9uIChSRkMgNjc0OSBTZWN0aW9uIDIuMSlcbiAqXG4gKiBAcGFyYW0gbWV0aG9kIC0gVGhlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB0byB1c2VcbiAqIEBwYXJhbSBjbGllbnRJbmZvcm1hdGlvbiAtIE9BdXRoIGNsaWVudCBpbmZvcm1hdGlvbiBjb250YWluaW5nIGNyZWRlbnRpYWxzXG4gKiBAcGFyYW0gaGVhZGVycyAtIEhUVFAgaGVhZGVycyBvYmplY3QgdG8gbW9kaWZ5XG4gKiBAcGFyYW0gcGFyYW1zIC0gVVJMIHNlYXJjaCBwYXJhbWV0ZXJzIHRvIG1vZGlmeVxuICogQHRocm93cyB7RXJyb3J9IFdoZW4gcmVxdWlyZWQgY3JlZGVudGlhbHMgYXJlIG1pc3NpbmdcbiAqL1xuZnVuY3Rpb24gYXBwbHlDbGllbnRBdXRoZW50aWNhdGlvbihtZXRob2QsIGNsaWVudEluZm9ybWF0aW9uLCBoZWFkZXJzLCBwYXJhbXMpIHtcbiAgICBjb25zdCB7IGNsaWVudF9pZCwgY2xpZW50X3NlY3JldCB9ID0gY2xpZW50SW5mb3JtYXRpb247XG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgICAgY2FzZSAnY2xpZW50X3NlY3JldF9iYXNpYyc6XG4gICAgICAgICAgICBhcHBseUJhc2ljQXV0aChjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIGhlYWRlcnMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlICdjbGllbnRfc2VjcmV0X3Bvc3QnOlxuICAgICAgICAgICAgYXBwbHlQb3N0QXV0aChjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICAgICAgYXBwbHlQdWJsaWNBdXRoKGNsaWVudF9pZCwgcGFyYW1zKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgY2xpZW50IGF1dGhlbnRpY2F0aW9uIG1ldGhvZDogJHttZXRob2R9YCk7XG4gICAgfVxufVxuLyoqXG4gKiBBcHBsaWVzIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24gKFJGQyA2NzQ5IFNlY3Rpb24gMi4zLjEpXG4gKi9cbmZ1bmN0aW9uIGFwcGx5QmFzaWNBdXRoKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGhlYWRlcnMpIHtcbiAgICBpZiAoIWNsaWVudFNlY3JldCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsaWVudF9zZWNyZXRfYmFzaWMgYXV0aGVudGljYXRpb24gcmVxdWlyZXMgYSBjbGllbnRfc2VjcmV0Jyk7XG4gICAgfVxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYnRvYShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YCk7XG4gICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmFzaWMgJHtjcmVkZW50aWFsc31gKTtcbn1cbi8qKlxuICogQXBwbGllcyBQT1NUIGJvZHkgYXV0aGVudGljYXRpb24gKFJGQyA2NzQ5IFNlY3Rpb24gMi4zLjEpXG4gKi9cbmZ1bmN0aW9uIGFwcGx5UG9zdEF1dGgoY2xpZW50SWQsIGNsaWVudFNlY3JldCwgcGFyYW1zKSB7XG4gICAgcGFyYW1zLnNldCgnY2xpZW50X2lkJywgY2xpZW50SWQpO1xuICAgIGlmIChjbGllbnRTZWNyZXQpIHtcbiAgICAgICAgcGFyYW1zLnNldCgnY2xpZW50X3NlY3JldCcsIGNsaWVudFNlY3JldCk7XG4gICAgfVxufVxuLyoqXG4gKiBBcHBsaWVzIHB1YmxpYyBjbGllbnQgYXV0aGVudGljYXRpb24gKFJGQyA2NzQ5IFNlY3Rpb24gMi4xKVxuICovXG5mdW5jdGlvbiBhcHBseVB1YmxpY0F1dGgoY2xpZW50SWQsIHBhcmFtcykge1xuICAgIHBhcmFtcy5zZXQoJ2NsaWVudF9pZCcsIGNsaWVudElkKTtcbn1cbi8qKlxuICogUGFyc2VzIGFuIE9BdXRoIGVycm9yIHJlc3BvbnNlIGZyb20gYSBzdHJpbmcgb3IgUmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIElmIHRoZSBpbnB1dCBpcyBhIHN0YW5kYXJkIE9BdXRoMi4wIGVycm9yIHJlc3BvbnNlLCBpdCB3aWxsIGJlIHBhcnNlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNcbiAqIGFuZCBhbiBpbnN0YW5jZSBvZiB0aGUgYXBwcm9wcmlhdGUgT0F1dGhFcnJvciBzdWJjbGFzcyB3aWxsIGJlIHJldHVybmVkLlxuICogSWYgcGFyc2luZyBmYWlscywgaXQgZmFsbHMgYmFjayB0byBhIGdlbmVyaWMgU2VydmVyRXJyb3IgdGhhdCBpbmNsdWRlc1xuICogdGhlIHJlc3BvbnNlIHN0YXR1cyAoaWYgYXZhaWxhYmxlKSBhbmQgb3JpZ2luYWwgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBBIFJlc3BvbnNlIG9iamVjdCBvciBzdHJpbmcgY29udGFpbmluZyB0aGUgZXJyb3IgcmVzcG9uc2VcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIE9BdXRoRXJyb3IgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhcnNlRXJyb3JSZXNwb25zZShpbnB1dCkge1xuICAgIGNvbnN0IHN0YXR1c0NvZGUgPSBpbnB1dCBpbnN0YW5jZW9mIFJlc3BvbnNlID8gaW5wdXQuc3RhdHVzIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGJvZHkgPSBpbnB1dCBpbnN0YW5jZW9mIFJlc3BvbnNlID8gYXdhaXQgaW5wdXQudGV4dCgpIDogaW5wdXQ7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gT0F1dGhFcnJvclJlc3BvbnNlU2NoZW1hLnBhcnNlKEpTT04ucGFyc2UoYm9keSkpO1xuICAgICAgICBjb25zdCB7IGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbiwgZXJyb3JfdXJpIH0gPSByZXN1bHQ7XG4gICAgICAgIGNvbnN0IGVycm9yQ2xhc3MgPSBPQVVUSF9FUlJPUlNbZXJyb3JdIHx8IFNlcnZlckVycm9yO1xuICAgICAgICByZXR1cm4gbmV3IGVycm9yQ2xhc3MoZXJyb3JfZGVzY3JpcHRpb24gfHwgJycsIGVycm9yX3VyaSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBOb3QgYSB2YWxpZCBPQXV0aCBlcnJvciByZXNwb25zZSwgYnV0IHRyeSB0byBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlIHJhdyBkYXRhIGFueXdheVxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgJHtzdGF0dXNDb2RlID8gYEhUVFAgJHtzdGF0dXNDb2RlfTogYCA6ICcnfUludmFsaWQgT0F1dGggZXJyb3IgcmVzcG9uc2U6ICR7ZXJyb3J9LiBSYXcgYm9keTogJHtib2R5fWA7XG4gICAgICAgIHJldHVybiBuZXcgU2VydmVyRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG59XG4vKipcbiAqIE9yY2hlc3RyYXRlcyB0aGUgZnVsbCBhdXRoIGZsb3cgd2l0aCBhIHNlcnZlci5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGFzIGEgc2luZ2xlIGVudHJ5IHBvaW50IGZvciBhbGwgYXV0aG9yaXphdGlvbiBmdW5jdGlvbmFsaXR5LFxuICogaW5zdGVhZCBvZiBsaW5raW5nIHRvZ2V0aGVyIHRoZSBvdGhlciBsb3dlci1sZXZlbCBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhdXRoKHByb3ZpZGVyLCBvcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGF1dGhJbnRlcm5hbChwcm92aWRlciwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBIYW5kbGUgcmVjb3ZlcmFibGUgZXJyb3IgdHlwZXMgYnkgaW52YWxpZGF0aW5nIGNyZWRlbnRpYWxzIGFuZCByZXRyeWluZ1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBJbnZhbGlkQ2xpZW50RXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBVbmF1dGhvcml6ZWRDbGllbnRFcnJvcikge1xuICAgICAgICAgICAgYXdhaXQgcHJvdmlkZXIuaW52YWxpZGF0ZUNyZWRlbnRpYWxzPy4oJ2FsbCcpO1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGF1dGhJbnRlcm5hbChwcm92aWRlciwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBJbnZhbGlkR3JhbnRFcnJvcikge1xuICAgICAgICAgICAgYXdhaXQgcHJvdmlkZXIuaW52YWxpZGF0ZUNyZWRlbnRpYWxzPy4oJ3Rva2VucycpO1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGF1dGhJbnRlcm5hbChwcm92aWRlciwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhyb3cgb3RoZXJ3aXNlXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGF1dGhJbnRlcm5hbChwcm92aWRlciwgeyBzZXJ2ZXJVcmwsIGF1dGhvcml6YXRpb25Db2RlLCBzY29wZSwgcmVzb3VyY2VNZXRhZGF0YVVybCwgZmV0Y2hGbiB9KSB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHByb3ZpZGVyIGhhcyBjYWNoZWQgZGlzY292ZXJ5IHN0YXRlIHRvIHNraXAgZGlzY292ZXJ5XG4gICAgY29uc3QgY2FjaGVkU3RhdGUgPSBhd2FpdCBwcm92aWRlci5kaXNjb3ZlcnlTdGF0ZT8uKCk7XG4gICAgbGV0IHJlc291cmNlTWV0YWRhdGE7XG4gICAgbGV0IGF1dGhvcml6YXRpb25TZXJ2ZXJVcmw7XG4gICAgbGV0IG1ldGFkYXRhO1xuICAgIC8vIElmIHJlc291cmNlTWV0YWRhdGFVcmwgaXMgbm90IHByb3ZpZGVkLCB0cnkgdG8gbG9hZCBpdCBmcm9tIGNhY2hlZCBzdGF0ZVxuICAgIC8vIFRoaXMgaGFuZGxlcyBicm93c2VyIHJlZGlyZWN0cyB3aGVyZSB0aGUgVVJMIHdhcyBzYXZlZCBiZWZvcmUgbmF2aWdhdGlvblxuICAgIGxldCBlZmZlY3RpdmVSZXNvdXJjZU1ldGFkYXRhVXJsID0gcmVzb3VyY2VNZXRhZGF0YVVybDtcbiAgICBpZiAoIWVmZmVjdGl2ZVJlc291cmNlTWV0YWRhdGFVcmwgJiYgY2FjaGVkU3RhdGU/LnJlc291cmNlTWV0YWRhdGFVcmwpIHtcbiAgICAgICAgZWZmZWN0aXZlUmVzb3VyY2VNZXRhZGF0YVVybCA9IG5ldyBVUkwoY2FjaGVkU3RhdGUucmVzb3VyY2VNZXRhZGF0YVVybCk7XG4gICAgfVxuICAgIGlmIChjYWNoZWRTdGF0ZT8uYXV0aG9yaXphdGlvblNlcnZlclVybCkge1xuICAgICAgICAvLyBSZXN0b3JlIGRpc2NvdmVyeSBzdGF0ZSBmcm9tIGNhY2hlXG4gICAgICAgIGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwgPSBjYWNoZWRTdGF0ZS5hdXRob3JpemF0aW9uU2VydmVyVXJsO1xuICAgICAgICByZXNvdXJjZU1ldGFkYXRhID0gY2FjaGVkU3RhdGUucmVzb3VyY2VNZXRhZGF0YTtcbiAgICAgICAgbWV0YWRhdGEgPVxuICAgICAgICAgICAgY2FjaGVkU3RhdGUuYXV0aG9yaXphdGlvblNlcnZlck1ldGFkYXRhID8/IChhd2FpdCBkaXNjb3ZlckF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YShhdXRob3JpemF0aW9uU2VydmVyVXJsLCB7IGZldGNoRm4gfSkpO1xuICAgICAgICAvLyBJZiByZXNvdXJjZSBtZXRhZGF0YSB3YXNuJ3QgY2FjaGVkLCB0cnkgdG8gZmV0Y2ggaXQgZm9yIHNlbGVjdFJlc291cmNlVVJMXG4gICAgICAgIGlmICghcmVzb3VyY2VNZXRhZGF0YSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZU1ldGFkYXRhID0gYXdhaXQgZGlzY292ZXJPQXV0aFByb3RlY3RlZFJlc291cmNlTWV0YWRhdGEoc2VydmVyVXJsLCB7IHJlc291cmNlTWV0YWRhdGFVcmw6IGVmZmVjdGl2ZVJlc291cmNlTWV0YWRhdGFVcmwgfSwgZmV0Y2hGbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gUkZDIDk3Mjggbm90IGF2YWlsYWJsZSDigJQgc2VsZWN0UmVzb3VyY2VVUkwgd2lsbCBoYW5kbGUgdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmUtc2F2ZSBpZiB3ZSBlbnJpY2hlZCB0aGUgY2FjaGVkIHN0YXRlIHdpdGggbWlzc2luZyBtZXRhZGF0YVxuICAgICAgICBpZiAobWV0YWRhdGEgIT09IGNhY2hlZFN0YXRlLmF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YSB8fCByZXNvdXJjZU1ldGFkYXRhICE9PSBjYWNoZWRTdGF0ZS5yZXNvdXJjZU1ldGFkYXRhKSB7XG4gICAgICAgICAgICBhd2FpdCBwcm92aWRlci5zYXZlRGlzY292ZXJ5U3RhdGU/Lih7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXphdGlvblNlcnZlclVybDogU3RyaW5nKGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwpLFxuICAgICAgICAgICAgICAgIHJlc291cmNlTWV0YWRhdGFVcmw6IGVmZmVjdGl2ZVJlc291cmNlTWV0YWRhdGFVcmw/LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uU2VydmVyTWV0YWRhdGE6IG1ldGFkYXRhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gRnVsbCBkaXNjb3ZlcnkgdmlhIFJGQyA5NzI4XG4gICAgICAgIGNvbnN0IHNlcnZlckluZm8gPSBhd2FpdCBkaXNjb3Zlck9BdXRoU2VydmVySW5mbyhzZXJ2ZXJVcmwsIHsgcmVzb3VyY2VNZXRhZGF0YVVybDogZWZmZWN0aXZlUmVzb3VyY2VNZXRhZGF0YVVybCwgZmV0Y2hGbiB9KTtcbiAgICAgICAgYXV0aG9yaXphdGlvblNlcnZlclVybCA9IHNlcnZlckluZm8uYXV0aG9yaXphdGlvblNlcnZlclVybDtcbiAgICAgICAgbWV0YWRhdGEgPSBzZXJ2ZXJJbmZvLmF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YTtcbiAgICAgICAgcmVzb3VyY2VNZXRhZGF0YSA9IHNlcnZlckluZm8ucmVzb3VyY2VNZXRhZGF0YTtcbiAgICAgICAgLy8gUGVyc2lzdCBkaXNjb3Zlcnkgc3RhdGUgZm9yIGZ1dHVyZSB1c2VcbiAgICAgICAgLy8gVE9ETzogcmVzb3VyY2VNZXRhZGF0YVVybCBpcyBvbmx5IHBvcHVsYXRlZCB3aGVuIGV4cGxpY2l0bHkgcHJvdmlkZWQgdmlhIG9wdGlvbnNcbiAgICAgICAgLy8gb3IgbG9hZGVkIGZyb20gY2FjaGVkIHN0YXRlLiBUaGUgVVJMIGRlcml2ZWQgaW50ZXJuYWxseSBieVxuICAgICAgICAvLyBkaXNjb3Zlck9BdXRoUHJvdGVjdGVkUmVzb3VyY2VNZXRhZGF0YSgpIGlzIG5vdCBjYXB0dXJlZCBiYWNrIGhlcmUuXG4gICAgICAgIGF3YWl0IHByb3ZpZGVyLnNhdmVEaXNjb3ZlcnlTdGF0ZT8uKHtcbiAgICAgICAgICAgIGF1dGhvcml6YXRpb25TZXJ2ZXJVcmw6IFN0cmluZyhhdXRob3JpemF0aW9uU2VydmVyVXJsKSxcbiAgICAgICAgICAgIHJlc291cmNlTWV0YWRhdGFVcmw6IGVmZmVjdGl2ZVJlc291cmNlTWV0YWRhdGFVcmw/LnRvU3RyaW5nKCksXG4gICAgICAgICAgICByZXNvdXJjZU1ldGFkYXRhLFxuICAgICAgICAgICAgYXV0aG9yaXphdGlvblNlcnZlck1ldGFkYXRhOiBtZXRhZGF0YVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgcmVzb3VyY2UgPSBhd2FpdCBzZWxlY3RSZXNvdXJjZVVSTChzZXJ2ZXJVcmwsIHByb3ZpZGVyLCByZXNvdXJjZU1ldGFkYXRhKTtcbiAgICAvLyBBcHBseSBzY29wZSBzZWxlY3Rpb24gc3RyYXRlZ3kgKFNFUC04MzUpOlxuICAgIC8vIDEuIFdXVy1BdXRoZW50aWNhdGUgc2NvcGUgKHBhc3NlZCB2aWEgYHNjb3BlYCBwYXJhbSlcbiAgICAvLyAyLiBQUk0gc2NvcGVzX3N1cHBvcnRlZFxuICAgIC8vIDMuIENsaWVudCBtZXRhZGF0YSBzY29wZSAodXNlci1jb25maWd1cmVkIGZhbGxiYWNrKVxuICAgIC8vIFRoZSByZXNvbHZlZCBzY29wZSBpcyB1c2VkIGNvbnNpc3RlbnRseSBmb3IgYm90aCBEQ1IgYW5kIHRoZSBhdXRob3JpemF0aW9uIHJlcXVlc3QuXG4gICAgY29uc3QgcmVzb2x2ZWRTY29wZSA9IHNjb3BlIHx8IHJlc291cmNlTWV0YWRhdGE/LnNjb3Blc19zdXBwb3J0ZWQ/LmpvaW4oJyAnKSB8fCBwcm92aWRlci5jbGllbnRNZXRhZGF0YS5zY29wZTtcbiAgICAvLyBIYW5kbGUgY2xpZW50IHJlZ2lzdHJhdGlvbiBpZiBuZWVkZWRcbiAgICBsZXQgY2xpZW50SW5mb3JtYXRpb24gPSBhd2FpdCBQcm9taXNlLnJlc29sdmUocHJvdmlkZXIuY2xpZW50SW5mb3JtYXRpb24oKSk7XG4gICAgaWYgKCFjbGllbnRJbmZvcm1hdGlvbikge1xuICAgICAgICBpZiAoYXV0aG9yaXphdGlvbkNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeGlzdGluZyBPQXV0aCBjbGllbnQgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQgd2hlbiBleGNoYW5naW5nIGFuIGF1dGhvcml6YXRpb24gY29kZScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1cHBvcnRzVXJsQmFzZWRDbGllbnRJZCA9IG1ldGFkYXRhPy5jbGllbnRfaWRfbWV0YWRhdGFfZG9jdW1lbnRfc3VwcG9ydGVkID09PSB0cnVlO1xuICAgICAgICBjb25zdCBjbGllbnRNZXRhZGF0YVVybCA9IHByb3ZpZGVyLmNsaWVudE1ldGFkYXRhVXJsO1xuICAgICAgICBpZiAoY2xpZW50TWV0YWRhdGFVcmwgJiYgIWlzSHR0cHNVcmwoY2xpZW50TWV0YWRhdGFVcmwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENsaWVudE1ldGFkYXRhRXJyb3IoYGNsaWVudE1ldGFkYXRhVXJsIG11c3QgYmUgYSB2YWxpZCBIVFRQUyBVUkwgd2l0aCBhIG5vbi1yb290IHBhdGhuYW1lLCBnb3Q6ICR7Y2xpZW50TWV0YWRhdGFVcmx9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hvdWxkVXNlVXJsQmFzZWRDbGllbnRJZCA9IHN1cHBvcnRzVXJsQmFzZWRDbGllbnRJZCAmJiBjbGllbnRNZXRhZGF0YVVybDtcbiAgICAgICAgaWYgKHNob3VsZFVzZVVybEJhc2VkQ2xpZW50SWQpIHtcbiAgICAgICAgICAgIC8vIFNFUC05OTE6IFVSTC1iYXNlZCBDbGllbnQgSURzXG4gICAgICAgICAgICBjbGllbnRJbmZvcm1hdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBjbGllbnRfaWQ6IGNsaWVudE1ldGFkYXRhVXJsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXdhaXQgcHJvdmlkZXIuc2F2ZUNsaWVudEluZm9ybWF0aW9uPy4oY2xpZW50SW5mb3JtYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gZHluYW1pYyByZWdpc3RyYXRpb25cbiAgICAgICAgICAgIGlmICghcHJvdmlkZXIuc2F2ZUNsaWVudEluZm9ybWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPQXV0aCBjbGllbnQgaW5mb3JtYXRpb24gbXVzdCBiZSBzYXZlYWJsZSBmb3IgZHluYW1pYyByZWdpc3RyYXRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZ1bGxJbmZvcm1hdGlvbiA9IGF3YWl0IHJlZ2lzdGVyQ2xpZW50KGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwsIHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBjbGllbnRNZXRhZGF0YTogcHJvdmlkZXIuY2xpZW50TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgc2NvcGU6IHJlc29sdmVkU2NvcGUsXG4gICAgICAgICAgICAgICAgZmV0Y2hGblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCBwcm92aWRlci5zYXZlQ2xpZW50SW5mb3JtYXRpb24oZnVsbEluZm9ybWF0aW9uKTtcbiAgICAgICAgICAgIGNsaWVudEluZm9ybWF0aW9uID0gZnVsbEluZm9ybWF0aW9uO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE5vbi1pbnRlcmFjdGl2ZSBmbG93cyAoZS5nLiwgY2xpZW50X2NyZWRlbnRpYWxzLCBqd3QtYmVhcmVyKSBkb24ndCBuZWVkIGEgcmVkaXJlY3QgVVJMXG4gICAgY29uc3Qgbm9uSW50ZXJhY3RpdmVGbG93ID0gIXByb3ZpZGVyLnJlZGlyZWN0VXJsO1xuICAgIC8vIEV4Y2hhbmdlIGF1dGhvcml6YXRpb24gY29kZSBmb3IgdG9rZW5zLCBvciBmZXRjaCB0b2tlbnMgZGlyZWN0bHkgZm9yIG5vbi1pbnRlcmFjdGl2ZSBmbG93c1xuICAgIGlmIChhdXRob3JpemF0aW9uQ29kZSAhPT0gdW5kZWZpbmVkIHx8IG5vbkludGVyYWN0aXZlRmxvdykge1xuICAgICAgICBjb25zdCB0b2tlbnMgPSBhd2FpdCBmZXRjaFRva2VuKHByb3ZpZGVyLCBhdXRob3JpemF0aW9uU2VydmVyVXJsLCB7XG4gICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgIHJlc291cmNlLFxuICAgICAgICAgICAgYXV0aG9yaXphdGlvbkNvZGUsXG4gICAgICAgICAgICBmZXRjaEZuXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBwcm92aWRlci5zYXZlVG9rZW5zKHRva2Vucyk7XG4gICAgICAgIHJldHVybiAnQVVUSE9SSVpFRCc7XG4gICAgfVxuICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IHByb3ZpZGVyLnRva2VucygpO1xuICAgIC8vIEhhbmRsZSB0b2tlbiByZWZyZXNoIG9yIG5ldyBhdXRob3JpemF0aW9uXG4gICAgaWYgKHRva2Vucz8ucmVmcmVzaF90b2tlbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byByZWZyZXNoIHRoZSB0b2tlblxuICAgICAgICAgICAgY29uc3QgbmV3VG9rZW5zID0gYXdhaXQgcmVmcmVzaEF1dGhvcml6YXRpb24oYXV0aG9yaXphdGlvblNlcnZlclVybCwge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIGNsaWVudEluZm9ybWF0aW9uLFxuICAgICAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogdG9rZW5zLnJlZnJlc2hfdG9rZW4sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgYWRkQ2xpZW50QXV0aGVudGljYXRpb246IHByb3ZpZGVyLmFkZENsaWVudEF1dGhlbnRpY2F0aW9uLFxuICAgICAgICAgICAgICAgIGZldGNoRm5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgcHJvdmlkZXIuc2F2ZVRva2VucyhuZXdUb2tlbnMpO1xuICAgICAgICAgICAgcmV0dXJuICdBVVRIT1JJWkVEJztcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBTZXJ2ZXJFcnJvciwgb3IgYW4gdW5rbm93biB0eXBlLCBsb2cgaXQgb3V0IGFuZCB0cnkgdG8gY29udGludWUuIE90aGVyd2lzZSwgZXNjYWxhdGUgc28gd2UgY2FuIGZpeCB0aGluZ3MgYW5kIHJldHJ5LlxuICAgICAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBPQXV0aEVycm9yKSB8fCBlcnJvciBpbnN0YW5jZW9mIFNlcnZlckVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gQ291bGQgbm90IHJlZnJlc2ggT0F1dGggdG9rZW5zXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBSZWZyZXNoIGZhaWxlZCBmb3IgYW5vdGhlciByZWFzb24sIHJlLXRocm93XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhdGUgPSBwcm92aWRlci5zdGF0ZSA/IGF3YWl0IHByb3ZpZGVyLnN0YXRlKCkgOiB1bmRlZmluZWQ7XG4gICAgLy8gU3RhcnQgbmV3IGF1dGhvcml6YXRpb24gZmxvd1xuICAgIGNvbnN0IHsgYXV0aG9yaXphdGlvblVybCwgY29kZVZlcmlmaWVyIH0gPSBhd2FpdCBzdGFydEF1dGhvcml6YXRpb24oYXV0aG9yaXphdGlvblNlcnZlclVybCwge1xuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgY2xpZW50SW5mb3JtYXRpb24sXG4gICAgICAgIHN0YXRlLFxuICAgICAgICByZWRpcmVjdFVybDogcHJvdmlkZXIucmVkaXJlY3RVcmwsXG4gICAgICAgIHNjb3BlOiByZXNvbHZlZFNjb3BlLFxuICAgICAgICByZXNvdXJjZVxuICAgIH0pO1xuICAgIGF3YWl0IHByb3ZpZGVyLnNhdmVDb2RlVmVyaWZpZXIoY29kZVZlcmlmaWVyKTtcbiAgICBhd2FpdCBwcm92aWRlci5yZWRpcmVjdFRvQXV0aG9yaXphdGlvbihhdXRob3JpemF0aW9uVXJsKTtcbiAgICByZXR1cm4gJ1JFRElSRUNUJztcbn1cbi8qKlxuICogU0VQLTk5MTogVVJMLWJhc2VkIENsaWVudCBJRHNcbiAqIFZhbGlkYXRlIHRoYXQgdGhlIGNsaWVudF9pZCBpcyBhIHZhbGlkIFVSTCB3aXRoIGh0dHBzIHNjaGVtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNIdHRwc1VybCh2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgdXJsLnBhdGhuYW1lICE9PSAnLyc7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWxlY3RSZXNvdXJjZVVSTChzZXJ2ZXJVcmwsIHByb3ZpZGVyLCByZXNvdXJjZU1ldGFkYXRhKSB7XG4gICAgY29uc3QgZGVmYXVsdFJlc291cmNlID0gcmVzb3VyY2VVcmxGcm9tU2VydmVyVXJsKHNlcnZlclVybCk7XG4gICAgLy8gSWYgcHJvdmlkZXIgaGFzIGN1c3RvbSB2YWxpZGF0aW9uLCBkZWxlZ2F0ZSB0byBpdFxuICAgIGlmIChwcm92aWRlci52YWxpZGF0ZVJlc291cmNlVVJMKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBwcm92aWRlci52YWxpZGF0ZVJlc291cmNlVVJMKGRlZmF1bHRSZXNvdXJjZSwgcmVzb3VyY2VNZXRhZGF0YT8ucmVzb3VyY2UpO1xuICAgIH1cbiAgICAvLyBPbmx5IGluY2x1ZGUgcmVzb3VyY2UgcGFyYW1ldGVyIHdoZW4gUHJvdGVjdGVkIFJlc291cmNlIE1ldGFkYXRhIGlzIHByZXNlbnRcbiAgICBpZiAoIXJlc291cmNlTWV0YWRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgbWV0YWRhdGEncyByZXNvdXJjZSBpcyBjb21wYXRpYmxlIHdpdGggb3VyIHJlcXVlc3RcbiAgICBpZiAoIWNoZWNrUmVzb3VyY2VBbGxvd2VkKHsgcmVxdWVzdGVkUmVzb3VyY2U6IGRlZmF1bHRSZXNvdXJjZSwgY29uZmlndXJlZFJlc291cmNlOiByZXNvdXJjZU1ldGFkYXRhLnJlc291cmNlIH0pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdGVjdGVkIHJlc291cmNlICR7cmVzb3VyY2VNZXRhZGF0YS5yZXNvdXJjZX0gZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgJHtkZWZhdWx0UmVzb3VyY2V9IChvciBvcmlnaW4pYCk7XG4gICAgfVxuICAgIC8vIFByZWZlciB0aGUgcmVzb3VyY2UgZnJvbSBtZXRhZGF0YSBzaW5jZSBpdCdzIHdoYXQgdGhlIHNlcnZlciBpcyB0ZWxsaW5nIHVzIHRvIHJlcXVlc3RcbiAgICByZXR1cm4gbmV3IFVSTChyZXNvdXJjZU1ldGFkYXRhLnJlc291cmNlKTtcbn1cbi8qKlxuICogRXh0cmFjdCByZXNvdXJjZV9tZXRhZGF0YSwgc2NvcGUsIGFuZCBlcnJvciBmcm9tIFdXVy1BdXRoZW50aWNhdGUgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFdXV0F1dGhlbnRpY2F0ZVBhcmFtcyhyZXMpIHtcbiAgICBjb25zdCBhdXRoZW50aWNhdGVIZWFkZXIgPSByZXMuaGVhZGVycy5nZXQoJ1dXVy1BdXRoZW50aWNhdGUnKTtcbiAgICBpZiAoIWF1dGhlbnRpY2F0ZUhlYWRlcikge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IFt0eXBlLCBzY2hlbWVdID0gYXV0aGVudGljYXRlSGVhZGVyLnNwbGl0KCcgJyk7XG4gICAgaWYgKHR5cGUudG9Mb3dlckNhc2UoKSAhPT0gJ2JlYXJlcicgfHwgIXNjaGVtZSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHJlc291cmNlTWV0YWRhdGFNYXRjaCA9IGV4dHJhY3RGaWVsZEZyb21Xd3dBdXRoKHJlcywgJ3Jlc291cmNlX21ldGFkYXRhJykgfHwgdW5kZWZpbmVkO1xuICAgIGxldCByZXNvdXJjZU1ldGFkYXRhVXJsO1xuICAgIGlmIChyZXNvdXJjZU1ldGFkYXRhTWF0Y2gpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc291cmNlTWV0YWRhdGFVcmwgPSBuZXcgVVJMKHJlc291cmNlTWV0YWRhdGFNYXRjaCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgLy8gSWdub3JlIGludmFsaWQgVVJMXG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2NvcGUgPSBleHRyYWN0RmllbGRGcm9tV3d3QXV0aChyZXMsICdzY29wZScpIHx8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBlcnJvciA9IGV4dHJhY3RGaWVsZEZyb21Xd3dBdXRoKHJlcywgJ2Vycm9yJykgfHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlc291cmNlTWV0YWRhdGFVcmwsXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBlcnJvclxuICAgIH07XG59XG4vKipcbiAqIEV4dHJhY3RzIGEgc3BlY2lmaWMgZmllbGQncyB2YWx1ZSBmcm9tIHRoZSBXV1ctQXV0aGVudGljYXRlIGhlYWRlciBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHJlc3BvbnNlIFRoZSBIVFRQIHJlc3BvbnNlIG9iamVjdCBjb250YWluaW5nIHRoZSBoZWFkZXJzLlxuICogQHBhcmFtIGZpZWxkTmFtZSBUaGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gZXh0cmFjdCAoZS5nLiwgXCJyZWFsbVwiLCBcIm5vbmNlXCIpLlxuICogQHJldHVybnMgVGhlIGZpZWxkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RGaWVsZEZyb21Xd3dBdXRoKHJlc3BvbnNlLCBmaWVsZE5hbWUpIHtcbiAgICBjb25zdCB3d3dBdXRoSGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ1dXVy1BdXRoZW50aWNhdGUnKTtcbiAgICBpZiAoIXd3d0F1dGhIZWFkZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKGAke2ZpZWxkTmFtZX09KD86XCIoW15cIl0rKVwifChbXlxcXFxzLF0rKSlgKTtcbiAgICBjb25zdCBtYXRjaCA9IHd3d0F1dGhIZWFkZXIubWF0Y2gocGF0dGVybik7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIC8vIFBhdHRlcm4gbWF0Y2hlczogZmllbGRfbmFtZT1cInZhbHVlXCIgb3IgZmllbGRfbmFtZT12YWx1ZSAodW5xdW90ZWQpXG4gICAgICAgIHJldHVybiBtYXRjaFsxXSB8fCBtYXRjaFsyXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEV4dHJhY3QgcmVzb3VyY2VfbWV0YWRhdGEgZnJvbSByZXNwb25zZSBoZWFkZXIuXG4gKiBAZGVwcmVjYXRlZCBVc2UgYGV4dHJhY3RXV1dBdXRoZW50aWNhdGVQYXJhbXNgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0UmVzb3VyY2VNZXRhZGF0YVVybChyZXMpIHtcbiAgICBjb25zdCBhdXRoZW50aWNhdGVIZWFkZXIgPSByZXMuaGVhZGVycy5nZXQoJ1dXVy1BdXRoZW50aWNhdGUnKTtcbiAgICBpZiAoIWF1dGhlbnRpY2F0ZUhlYWRlcikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBbdHlwZSwgc2NoZW1lXSA9IGF1dGhlbnRpY2F0ZUhlYWRlci5zcGxpdCgnICcpO1xuICAgIGlmICh0eXBlLnRvTG93ZXJDYXNlKCkgIT09ICdiZWFyZXInIHx8ICFzY2hlbWUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcmVnZXggPSAvcmVzb3VyY2VfbWV0YWRhdGE9XCIoW15cIl0qKVwiLztcbiAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMoYXV0aGVudGljYXRlSGVhZGVyKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBuZXcgVVJMKG1hdGNoWzFdKTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbi8qKlxuICogTG9va3MgdXAgUkZDIDk3MjggT0F1dGggMi4wIFByb3RlY3RlZCBSZXNvdXJjZSBNZXRhZGF0YS5cbiAqXG4gKiBJZiB0aGUgc2VydmVyIHJldHVybnMgYSA0MDQgZm9yIHRoZSB3ZWxsLWtub3duIGVuZHBvaW50LCB0aGlzIGZ1bmN0aW9uIHdpbGxcbiAqIHJldHVybiBgdW5kZWZpbmVkYC4gQW55IG90aGVyIGVycm9ycyB3aWxsIGJlIHRocm93biBhcyBleGNlcHRpb25zLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJPQXV0aFByb3RlY3RlZFJlc291cmNlTWV0YWRhdGEoc2VydmVyVXJsLCBvcHRzLCBmZXRjaEZuID0gZmV0Y2gpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGRpc2NvdmVyTWV0YWRhdGFXaXRoRmFsbGJhY2soc2VydmVyVXJsLCAnb2F1dGgtcHJvdGVjdGVkLXJlc291cmNlJywgZmV0Y2hGbiwge1xuICAgICAgICBwcm90b2NvbFZlcnNpb246IG9wdHM/LnByb3RvY29sVmVyc2lvbixcbiAgICAgICAgbWV0YWRhdGFVcmw6IG9wdHM/LnJlc291cmNlTWV0YWRhdGFVcmxcbiAgICB9KTtcbiAgICBpZiAoIXJlc3BvbnNlIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIGF3YWl0IHJlc3BvbnNlPy5ib2R5Py5jYW5jZWwoKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXNvdXJjZSBzZXJ2ZXIgZG9lcyBub3QgaW1wbGVtZW50IE9BdXRoIDIuMCBQcm90ZWN0ZWQgUmVzb3VyY2UgTWV0YWRhdGEuYCk7XG4gICAgfVxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgYXdhaXQgcmVzcG9uc2UuYm9keT8uY2FuY2VsKCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30gdHJ5aW5nIHRvIGxvYWQgd2VsbC1rbm93biBPQXV0aCBwcm90ZWN0ZWQgcmVzb3VyY2UgbWV0YWRhdGEuYCk7XG4gICAgfVxuICAgIHJldHVybiBPQXV0aFByb3RlY3RlZFJlc291cmNlTWV0YWRhdGFTY2hlbWEucGFyc2UoYXdhaXQgcmVzcG9uc2UuanNvbigpKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSBmZXRjaCB3aXRoIENPUlMgcmV0cnkgbG9naWNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hXaXRoQ29yc1JldHJ5KHVybCwgaGVhZGVycywgZmV0Y2hGbiA9IGZldGNoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZldGNoRm4odXJsLCB7IGhlYWRlcnMgfSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgLy8gQ09SUyBlcnJvcnMgY29tZSBiYWNrIGFzIFR5cGVFcnJvciwgcmV0cnkgd2l0aG91dCBoZWFkZXJzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoV2l0aENvcnNSZXRyeSh1cmwsIHVuZGVmaW5lZCwgZmV0Y2hGbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIENPUlMgZXJyb3JzIG9uIHJldHJ5IHRvbywgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxufVxuLyoqXG4gKiBDb25zdHJ1Y3RzIHRoZSB3ZWxsLWtub3duIHBhdGggZm9yIGF1dGgtcmVsYXRlZCBtZXRhZGF0YSBkaXNjb3ZlcnlcbiAqL1xuZnVuY3Rpb24gYnVpbGRXZWxsS25vd25QYXRoKHdlbGxLbm93blByZWZpeCwgcGF0aG5hbWUgPSAnJywgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gU3RyaXAgdHJhaWxpbmcgc2xhc2ggZnJvbSBwYXRobmFtZSB0byBhdm9pZCBkb3VibGUgc2xhc2hlc1xuICAgIGlmIChwYXRobmFtZS5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhdGhuYW1lID0gcGF0aG5hbWUuc2xpY2UoMCwgLTEpO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucy5wcmVwZW5kUGF0aG5hbWUgPyBgJHtwYXRobmFtZX0vLndlbGwta25vd24vJHt3ZWxsS25vd25QcmVmaXh9YCA6IGAvLndlbGwta25vd24vJHt3ZWxsS25vd25QcmVmaXh9JHtwYXRobmFtZX1gO1xufVxuLyoqXG4gKiBUcmllcyB0byBkaXNjb3ZlciBPQXV0aCBtZXRhZGF0YSBhdCBhIHNwZWNpZmljIFVSTFxuICovXG5hc3luYyBmdW5jdGlvbiB0cnlNZXRhZGF0YURpc2NvdmVyeSh1cmwsIHByb3RvY29sVmVyc2lvbiwgZmV0Y2hGbiA9IGZldGNoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgJ01DUC1Qcm90b2NvbC1WZXJzaW9uJzogcHJvdG9jb2xWZXJzaW9uXG4gICAgfTtcbiAgICByZXR1cm4gYXdhaXQgZmV0Y2hXaXRoQ29yc1JldHJ5KHVybCwgaGVhZGVycywgZmV0Y2hGbik7XG59XG4vKipcbiAqIERldGVybWluZXMgaWYgZmFsbGJhY2sgdG8gcm9vdCBkaXNjb3Zlcnkgc2hvdWxkIGJlIGF0dGVtcHRlZFxuICovXG5mdW5jdGlvbiBzaG91bGRBdHRlbXB0RmFsbGJhY2socmVzcG9uc2UsIHBhdGhuYW1lKSB7XG4gICAgcmV0dXJuICFyZXNwb25zZSB8fCAocmVzcG9uc2Uuc3RhdHVzID49IDQwMCAmJiByZXNwb25zZS5zdGF0dXMgPCA1MDAgJiYgcGF0aG5hbWUgIT09ICcvJyk7XG59XG4vKipcbiAqIEdlbmVyaWMgZnVuY3Rpb24gZm9yIGRpc2NvdmVyaW5nIE9BdXRoIG1ldGFkYXRhIHdpdGggZmFsbGJhY2sgc3VwcG9ydFxuICovXG5hc3luYyBmdW5jdGlvbiBkaXNjb3Zlck1ldGFkYXRhV2l0aEZhbGxiYWNrKHNlcnZlclVybCwgd2VsbEtub3duVHlwZSwgZmV0Y2hGbiwgb3B0cykge1xuICAgIGNvbnN0IGlzc3VlciA9IG5ldyBVUkwoc2VydmVyVXJsKTtcbiAgICBjb25zdCBwcm90b2NvbFZlcnNpb24gPSBvcHRzPy5wcm90b2NvbFZlcnNpb24gPz8gTEFURVNUX1BST1RPQ09MX1ZFUlNJT047XG4gICAgbGV0IHVybDtcbiAgICBpZiAob3B0cz8ubWV0YWRhdGFVcmwpIHtcbiAgICAgICAgdXJsID0gbmV3IFVSTChvcHRzLm1ldGFkYXRhVXJsKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFRyeSBwYXRoLWF3YXJlIGRpc2NvdmVyeSBmaXJzdFxuICAgICAgICBjb25zdCB3ZWxsS25vd25QYXRoID0gYnVpbGRXZWxsS25vd25QYXRoKHdlbGxLbm93blR5cGUsIGlzc3Vlci5wYXRobmFtZSk7XG4gICAgICAgIHVybCA9IG5ldyBVUkwod2VsbEtub3duUGF0aCwgb3B0cz8ubWV0YWRhdGFTZXJ2ZXJVcmwgPz8gaXNzdWVyKTtcbiAgICAgICAgdXJsLnNlYXJjaCA9IGlzc3Vlci5zZWFyY2g7XG4gICAgfVxuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRyeU1ldGFkYXRhRGlzY292ZXJ5KHVybCwgcHJvdG9jb2xWZXJzaW9uLCBmZXRjaEZuKTtcbiAgICAvLyBJZiBwYXRoLWF3YXJlIGRpc2NvdmVyeSBmYWlscyB3aXRoIDQwNCBhbmQgd2UncmUgbm90IGFscmVhZHkgYXQgcm9vdCwgdHJ5IGZhbGxiYWNrIHRvIHJvb3QgZGlzY292ZXJ5XG4gICAgaWYgKCFvcHRzPy5tZXRhZGF0YVVybCAmJiBzaG91bGRBdHRlbXB0RmFsbGJhY2socmVzcG9uc2UsIGlzc3Vlci5wYXRobmFtZSkpIHtcbiAgICAgICAgY29uc3Qgcm9vdFVybCA9IG5ldyBVUkwoYC8ud2VsbC1rbm93bi8ke3dlbGxLbm93blR5cGV9YCwgaXNzdWVyKTtcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0cnlNZXRhZGF0YURpc2NvdmVyeShyb290VXJsLCBwcm90b2NvbFZlcnNpb24sIGZldGNoRm4pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2U7XG59XG4vKipcbiAqIExvb2tzIHVwIFJGQyA4NDE0IE9BdXRoIDIuMCBBdXRob3JpemF0aW9uIFNlcnZlciBNZXRhZGF0YS5cbiAqXG4gKiBJZiB0aGUgc2VydmVyIHJldHVybnMgYSA0MDQgZm9yIHRoZSB3ZWxsLWtub3duIGVuZHBvaW50LCB0aGlzIGZ1bmN0aW9uIHdpbGxcbiAqIHJldHVybiBgdW5kZWZpbmVkYC4gQW55IG90aGVyIGVycm9ycyB3aWxsIGJlIHRocm93biBhcyBleGNlcHRpb25zLlxuICpcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgZGlzY292ZXJBdXRob3JpemF0aW9uU2VydmVyTWV0YWRhdGFgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJPQXV0aE1ldGFkYXRhKGlzc3VlciwgeyBhdXRob3JpemF0aW9uU2VydmVyVXJsLCBwcm90b2NvbFZlcnNpb24gfSA9IHt9LCBmZXRjaEZuID0gZmV0Y2gpIHtcbiAgICBpZiAodHlwZW9mIGlzc3VlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaXNzdWVyID0gbmV3IFVSTChpc3N1ZXIpO1xuICAgIH1cbiAgICBpZiAoIWF1dGhvcml6YXRpb25TZXJ2ZXJVcmwpIHtcbiAgICAgICAgYXV0aG9yaXphdGlvblNlcnZlclVybCA9IGlzc3VlcjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhdXRob3JpemF0aW9uU2VydmVyVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgICBhdXRob3JpemF0aW9uU2VydmVyVXJsID0gbmV3IFVSTChhdXRob3JpemF0aW9uU2VydmVyVXJsKTtcbiAgICB9XG4gICAgcHJvdG9jb2xWZXJzaW9uID8/IChwcm90b2NvbFZlcnNpb24gPSBMQVRFU1RfUFJPVE9DT0xfVkVSU0lPTik7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBkaXNjb3Zlck1ldGFkYXRhV2l0aEZhbGxiYWNrKGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwsICdvYXV0aC1hdXRob3JpemF0aW9uLXNlcnZlcicsIGZldGNoRm4sIHtcbiAgICAgICAgcHJvdG9jb2xWZXJzaW9uLFxuICAgICAgICBtZXRhZGF0YVNlcnZlclVybDogYXV0aG9yaXphdGlvblNlcnZlclVybFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgYXdhaXQgcmVzcG9uc2U/LmJvZHk/LmNhbmNlbCgpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGF3YWl0IHJlc3BvbnNlLmJvZHk/LmNhbmNlbCgpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9IHRyeWluZyB0byBsb2FkIHdlbGwta25vd24gT0F1dGggbWV0YWRhdGFgKTtcbiAgICB9XG4gICAgcmV0dXJuIE9BdXRoTWV0YWRhdGFTY2hlbWEucGFyc2UoYXdhaXQgcmVzcG9uc2UuanNvbigpKTtcbn1cbi8qKlxuICogQnVpbGRzIGEgbGlzdCBvZiBkaXNjb3ZlcnkgVVJMcyB0byB0cnkgZm9yIGF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhLlxuICogVVJMcyBhcmUgcmV0dXJuZWQgaW4gcHJpb3JpdHkgb3JkZXI6XG4gKiAxLiBPQXV0aCBtZXRhZGF0YSBhdCB0aGUgZ2l2ZW4gVVJMXG4gKiAyLiBPSURDIG1ldGFkYXRhIGVuZHBvaW50cyBhdCB0aGUgZ2l2ZW4gVVJMXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZERpc2NvdmVyeVVybHMoYXV0aG9yaXphdGlvblNlcnZlclVybCkge1xuICAgIGNvbnN0IHVybCA9IHR5cGVvZiBhdXRob3JpemF0aW9uU2VydmVyVXJsID09PSAnc3RyaW5nJyA/IG5ldyBVUkwoYXV0aG9yaXphdGlvblNlcnZlclVybCkgOiBhdXRob3JpemF0aW9uU2VydmVyVXJsO1xuICAgIGNvbnN0IGhhc1BhdGggPSB1cmwucGF0aG5hbWUgIT09ICcvJztcbiAgICBjb25zdCB1cmxzVG9UcnkgPSBbXTtcbiAgICBpZiAoIWhhc1BhdGgpIHtcbiAgICAgICAgLy8gUm9vdCBwYXRoOiBodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29hdXRoLWF1dGhvcml6YXRpb24tc2VydmVyXG4gICAgICAgIHVybHNUb1RyeS5wdXNoKHtcbiAgICAgICAgICAgIHVybDogbmV3IFVSTCgnLy53ZWxsLWtub3duL29hdXRoLWF1dGhvcml6YXRpb24tc2VydmVyJywgdXJsLm9yaWdpbiksXG4gICAgICAgICAgICB0eXBlOiAnb2F1dGgnXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBPSURDOiBodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uXG4gICAgICAgIHVybHNUb1RyeS5wdXNoKHtcbiAgICAgICAgICAgIHVybDogbmV3IFVSTChgLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uYCwgdXJsLm9yaWdpbiksXG4gICAgICAgICAgICB0eXBlOiAnb2lkYydcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1cmxzVG9Ucnk7XG4gICAgfVxuICAgIC8vIFN0cmlwIHRyYWlsaW5nIHNsYXNoIGZyb20gcGF0aG5hbWUgdG8gYXZvaWQgZG91YmxlIHNsYXNoZXNcbiAgICBsZXQgcGF0aG5hbWUgPSB1cmwucGF0aG5hbWU7XG4gICAgaWYgKHBhdGhuYW1lLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aG5hbWUgPSBwYXRobmFtZS5zbGljZSgwLCAtMSk7XG4gICAgfVxuICAgIC8vIDEuIE9BdXRoIG1ldGFkYXRhIGF0IHRoZSBnaXZlbiBVUkxcbiAgICAvLyBJbnNlcnQgd2VsbC1rbm93biBiZWZvcmUgdGhlIHBhdGg6IGh0dHBzOi8vZXhhbXBsZS5jb20vLndlbGwta25vd24vb2F1dGgtYXV0aG9yaXphdGlvbi1zZXJ2ZXIvdGVuYW50MVxuICAgIHVybHNUb1RyeS5wdXNoKHtcbiAgICAgICAgdXJsOiBuZXcgVVJMKGAvLndlbGwta25vd24vb2F1dGgtYXV0aG9yaXphdGlvbi1zZXJ2ZXIke3BhdGhuYW1lfWAsIHVybC5vcmlnaW4pLFxuICAgICAgICB0eXBlOiAnb2F1dGgnXG4gICAgfSk7XG4gICAgLy8gMi4gT0lEQyBtZXRhZGF0YSBlbmRwb2ludHNcbiAgICAvLyBSRkMgODQxNCBzdHlsZTogSW5zZXJ0IC8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbiBiZWZvcmUgdGhlIHBhdGhcbiAgICB1cmxzVG9UcnkucHVzaCh7XG4gICAgICAgIHVybDogbmV3IFVSTChgLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJHtwYXRobmFtZX1gLCB1cmwub3JpZ2luKSxcbiAgICAgICAgdHlwZTogJ29pZGMnXG4gICAgfSk7XG4gICAgLy8gT0lEQyBEaXNjb3ZlcnkgMS4wIHN0eWxlOiBBcHBlbmQgLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIGFmdGVyIHRoZSBwYXRoXG4gICAgdXJsc1RvVHJ5LnB1c2goe1xuICAgICAgICB1cmw6IG5ldyBVUkwoYCR7cGF0aG5hbWV9Ly53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uYCwgdXJsLm9yaWdpbiksXG4gICAgICAgIHR5cGU6ICdvaWRjJ1xuICAgIH0pO1xuICAgIHJldHVybiB1cmxzVG9Ucnk7XG59XG4vKipcbiAqIERpc2NvdmVycyBhdXRob3JpemF0aW9uIHNlcnZlciBtZXRhZGF0YSB3aXRoIHN1cHBvcnQgZm9yIFJGQyA4NDE0IE9BdXRoIDIuMCBBdXRob3JpemF0aW9uIFNlcnZlciBNZXRhZGF0YVxuICogYW5kIE9wZW5JRCBDb25uZWN0IERpc2NvdmVyeSAxLjAgc3BlY2lmaWNhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIGEgZmFsbGJhY2sgc3RyYXRlZ3kgZm9yIGF1dGhvcml6YXRpb24gc2VydmVyIGRpc2NvdmVyeTpcbiAqIDEuIEF0dGVtcHRzIFJGQyA4NDE0IE9BdXRoIG1ldGFkYXRhIGRpc2NvdmVyeSBmaXJzdFxuICogMi4gSWYgT0F1dGggZGlzY292ZXJ5IGZhaWxzLCBmYWxscyBiYWNrIHRvIE9wZW5JRCBDb25uZWN0IERpc2NvdmVyeVxuICpcbiAqIEBwYXJhbSBhdXRob3JpemF0aW9uU2VydmVyVXJsIC0gVGhlIGF1dGhvcml6YXRpb24gc2VydmVyIFVSTCBvYnRhaW5lZCBmcm9tIHRoZSBNQ1AgU2VydmVyJ3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIHJlc291cmNlIG1ldGFkYXRhLCBvciB0aGUgTUNQIHNlcnZlcidzIFVSTCBpZiB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEgd2FzIG5vdCBmb3VuZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9ucy5mZXRjaEZuIC0gT3B0aW9uYWwgZmV0Y2ggZnVuY3Rpb24gZm9yIG1ha2luZyBIVFRQIHJlcXVlc3RzLCBkZWZhdWx0cyB0byBnbG9iYWwgZmV0Y2hcbiAqIEBwYXJhbSBvcHRpb25zLnByb3RvY29sVmVyc2lvbiAtIE1DUCBwcm90b2NvbCB2ZXJzaW9uIHRvIHVzZSwgZGVmYXVsdHMgdG8gTEFURVNUX1BST1RPQ09MX1ZFUlNJT05cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhLCBvciB1bmRlZmluZWQgaWYgZGlzY292ZXJ5IGZhaWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXNjb3ZlckF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YShhdXRob3JpemF0aW9uU2VydmVyVXJsLCB7IGZldGNoRm4gPSBmZXRjaCwgcHJvdG9jb2xWZXJzaW9uID0gTEFURVNUX1BST1RPQ09MX1ZFUlNJT04gfSA9IHt9KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgJ01DUC1Qcm90b2NvbC1WZXJzaW9uJzogcHJvdG9jb2xWZXJzaW9uLFxuICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIH07XG4gICAgLy8gR2V0IHRoZSBsaXN0IG9mIFVSTHMgdG8gdHJ5XG4gICAgY29uc3QgdXJsc1RvVHJ5ID0gYnVpbGREaXNjb3ZlcnlVcmxzKGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwpO1xuICAgIC8vIFRyeSBlYWNoIFVSTCBpbiBvcmRlclxuICAgIGZvciAoY29uc3QgeyB1cmw6IGVuZHBvaW50VXJsLCB0eXBlIH0gb2YgdXJsc1RvVHJ5KSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoQ29yc1JldHJ5KGVuZHBvaW50VXJsLCBoZWFkZXJzLCBmZXRjaEZuKTtcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBDT1JTIGVycm9yIG9jY3VycmVkIC0gZG9uJ3QgdGhyb3cgYXMgdGhlIGVuZHBvaW50IG1heSBub3QgYWxsb3cgQ09SUyxcbiAgICAgICAgICAgICAqIGNvbnRpbnVlIHRyeWluZyBvdGhlciBwb3NzaWJsZSBlbmRwb2ludHNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgYXdhaXQgcmVzcG9uc2UuYm9keT8uY2FuY2VsKCk7XG4gICAgICAgICAgICAvLyBDb250aW51ZSBsb29raW5nIGZvciBhbnkgNHh4IHJlc3BvbnNlIGNvZGUuXG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID49IDQwMCAmJiByZXNwb25zZS5zdGF0dXMgPCA1MDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gVHJ5IG5leHQgVVJMXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9IHRyeWluZyB0byBsb2FkICR7dHlwZSA9PT0gJ29hdXRoJyA/ICdPQXV0aCcgOiAnT3BlbklEIHByb3ZpZGVyJ30gbWV0YWRhdGEgZnJvbSAke2VuZHBvaW50VXJsfWApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBhcnNlIGFuZCB2YWxpZGF0ZSBiYXNlZCBvbiB0eXBlXG4gICAgICAgIGlmICh0eXBlID09PSAnb2F1dGgnKSB7XG4gICAgICAgICAgICByZXR1cm4gT0F1dGhNZXRhZGF0YVNjaGVtYS5wYXJzZShhd2FpdCByZXNwb25zZS5qc29uKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE9wZW5JZFByb3ZpZGVyRGlzY292ZXJ5TWV0YWRhdGFTY2hlbWEucGFyc2UoYXdhaXQgcmVzcG9uc2UuanNvbigpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBEaXNjb3ZlcnMgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyIGZvciBhbiBNQ1Agc2VydmVyIGZvbGxvd2luZ1xuICoge0BsaW5rIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjOTcyOCB8IFJGQyA5NzI4fSAoT0F1dGggMi4wIFByb3RlY3RlZFxuICogUmVzb3VyY2UgTWV0YWRhdGEpLCB3aXRoIGZhbGxiYWNrIHRvIHRyZWF0aW5nIHRoZSBzZXJ2ZXIgVVJMIGFzIHRoZVxuICogYXV0aG9yaXphdGlvbiBzZXJ2ZXIuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjb21iaW5lcyB0d28gZGlzY292ZXJ5IHN0ZXBzIGludG8gb25lIGNhbGw6XG4gKiAxLiBQcm9iZXMgYC8ud2VsbC1rbm93bi9vYXV0aC1wcm90ZWN0ZWQtcmVzb3VyY2VgIG9uIHRoZSBNQ1Agc2VydmVyIHRvIGZpbmQgdGhlXG4gKiAgICBhdXRob3JpemF0aW9uIHNlcnZlciBVUkwgKFJGQyA5NzI4KS5cbiAqIDIuIEZldGNoZXMgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgbWV0YWRhdGEgZnJvbSB0aGF0IFVSTCAoUkZDIDg0MTQgLyBPcGVuSUQgQ29ubmVjdCBEaXNjb3ZlcnkpLlxuICpcbiAqIFVzZSB0aGlzIHdoZW4geW91IG5lZWQgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhIGZvciBvcGVyYXRpb25zIG91dHNpZGUgdGhlXG4gKiB7QGxpbmtjb2RlIGF1dGh9IG9yY2hlc3RyYXRvciwgc3VjaCBhcyB0b2tlbiByZWZyZXNoIG9yIHRva2VuIHJldm9jYXRpb24uXG4gKlxuICogQHBhcmFtIHNlcnZlclVybCAtIFRoZSBNQ1AgcmVzb3VyY2Ugc2VydmVyIFVSTFxuICogQHBhcmFtIG9wdHMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gb3B0cy5yZXNvdXJjZU1ldGFkYXRhVXJsIC0gT3ZlcnJpZGUgVVJMIGZvciB0aGUgcHJvdGVjdGVkIHJlc291cmNlIG1ldGFkYXRhIGVuZHBvaW50XG4gKiBAcGFyYW0gb3B0cy5mZXRjaEZuIC0gQ3VzdG9tIGZldGNoIGZ1bmN0aW9uIGZvciBIVFRQIHJlcXVlc3RzXG4gKiBAcmV0dXJucyBBdXRob3JpemF0aW9uIHNlcnZlciBVUkwsIG1ldGFkYXRhLCBhbmQgcmVzb3VyY2UgbWV0YWRhdGEgKGlmIGF2YWlsYWJsZSlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc2NvdmVyT0F1dGhTZXJ2ZXJJbmZvKHNlcnZlclVybCwgb3B0cykge1xuICAgIGxldCByZXNvdXJjZU1ldGFkYXRhO1xuICAgIGxldCBhdXRob3JpemF0aW9uU2VydmVyVXJsO1xuICAgIHRyeSB7XG4gICAgICAgIHJlc291cmNlTWV0YWRhdGEgPSBhd2FpdCBkaXNjb3Zlck9BdXRoUHJvdGVjdGVkUmVzb3VyY2VNZXRhZGF0YShzZXJ2ZXJVcmwsIHsgcmVzb3VyY2VNZXRhZGF0YVVybDogb3B0cz8ucmVzb3VyY2VNZXRhZGF0YVVybCB9LCBvcHRzPy5mZXRjaEZuKTtcbiAgICAgICAgaWYgKHJlc291cmNlTWV0YWRhdGEuYXV0aG9yaXphdGlvbl9zZXJ2ZXJzICYmIHJlc291cmNlTWV0YWRhdGEuYXV0aG9yaXphdGlvbl9zZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwgPSByZXNvdXJjZU1ldGFkYXRhLmF1dGhvcml6YXRpb25fc2VydmVyc1swXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIC8vIFJGQyA5NzI4IG5vdCBzdXBwb3J0ZWQgLS0gZmFsbCBiYWNrIHRvIHRyZWF0aW5nIHRoZSBzZXJ2ZXIgVVJMIGFzIHRoZSBhdXRob3JpemF0aW9uIHNlcnZlclxuICAgIH1cbiAgICAvLyBJZiB3ZSBkb24ndCBnZXQgYSB2YWxpZCBhdXRob3JpemF0aW9uIHNlcnZlciBmcm9tIHByb3RlY3RlZCByZXNvdXJjZSBtZXRhZGF0YSxcbiAgICAvLyBmYWxsIGJhY2sgdG8gdGhlIGxlZ2FjeSBNQ1Agc3BlYyBiZWhhdmlvcjogTUNQIHNlcnZlciBiYXNlIFVSTCBhY3RzIGFzIHRoZSBhdXRob3JpemF0aW9uIHNlcnZlclxuICAgIGlmICghYXV0aG9yaXphdGlvblNlcnZlclVybCkge1xuICAgICAgICBhdXRob3JpemF0aW9uU2VydmVyVXJsID0gU3RyaW5nKG5ldyBVUkwoJy8nLCBzZXJ2ZXJVcmwpKTtcbiAgICB9XG4gICAgY29uc3QgYXV0aG9yaXphdGlvblNlcnZlck1ldGFkYXRhID0gYXdhaXQgZGlzY292ZXJBdXRob3JpemF0aW9uU2VydmVyTWV0YWRhdGEoYXV0aG9yaXphdGlvblNlcnZlclVybCwgeyBmZXRjaEZuOiBvcHRzPy5mZXRjaEZuIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwsXG4gICAgICAgIGF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YSxcbiAgICAgICAgcmVzb3VyY2VNZXRhZGF0YVxuICAgIH07XG59XG4vKipcbiAqIEJlZ2lucyB0aGUgYXV0aG9yaXphdGlvbiBmbG93IHdpdGggdGhlIGdpdmVuIHNlcnZlciwgYnkgZ2VuZXJhdGluZyBhIFBLQ0UgY2hhbGxlbmdlIGFuZCBjb25zdHJ1Y3RpbmcgdGhlIGF1dGhvcml6YXRpb24gVVJMLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRBdXRob3JpemF0aW9uKGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwsIHsgbWV0YWRhdGEsIGNsaWVudEluZm9ybWF0aW9uLCByZWRpcmVjdFVybCwgc2NvcGUsIHN0YXRlLCByZXNvdXJjZSB9KSB7XG4gICAgbGV0IGF1dGhvcml6YXRpb25Vcmw7XG4gICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgIGF1dGhvcml6YXRpb25VcmwgPSBuZXcgVVJMKG1ldGFkYXRhLmF1dGhvcml6YXRpb25fZW5kcG9pbnQpO1xuICAgICAgICBpZiAoIW1ldGFkYXRhLnJlc3BvbnNlX3R5cGVzX3N1cHBvcnRlZC5pbmNsdWRlcyhBVVRIT1JJWkFUSU9OX0NPREVfUkVTUE9OU0VfVFlQRSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5jb21wYXRpYmxlIGF1dGggc2VydmVyOiBkb2VzIG5vdCBzdXBwb3J0IHJlc3BvbnNlIHR5cGUgJHtBVVRIT1JJWkFUSU9OX0NPREVfUkVTUE9OU0VfVFlQRX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEuY29kZV9jaGFsbGVuZ2VfbWV0aG9kc19zdXBwb3J0ZWQgJiZcbiAgICAgICAgICAgICFtZXRhZGF0YS5jb2RlX2NoYWxsZW5nZV9tZXRob2RzX3N1cHBvcnRlZC5pbmNsdWRlcyhBVVRIT1JJWkFUSU9OX0NPREVfQ0hBTExFTkdFX01FVEhPRCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5jb21wYXRpYmxlIGF1dGggc2VydmVyOiBkb2VzIG5vdCBzdXBwb3J0IGNvZGUgY2hhbGxlbmdlIG1ldGhvZCAke0FVVEhPUklaQVRJT05fQ09ERV9DSEFMTEVOR0VfTUVUSE9EfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhdXRob3JpemF0aW9uVXJsID0gbmV3IFVSTCgnL2F1dGhvcml6ZScsIGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwpO1xuICAgIH1cbiAgICAvLyBHZW5lcmF0ZSBQS0NFIGNoYWxsZW5nZVxuICAgIGNvbnN0IGNoYWxsZW5nZSA9IGF3YWl0IHBrY2VDaGFsbGVuZ2UoKTtcbiAgICBjb25zdCBjb2RlVmVyaWZpZXIgPSBjaGFsbGVuZ2UuY29kZV92ZXJpZmllcjtcbiAgICBjb25zdCBjb2RlQ2hhbGxlbmdlID0gY2hhbGxlbmdlLmNvZGVfY2hhbGxlbmdlO1xuICAgIGF1dGhvcml6YXRpb25Vcmwuc2VhcmNoUGFyYW1zLnNldCgncmVzcG9uc2VfdHlwZScsIEFVVEhPUklaQVRJT05fQ09ERV9SRVNQT05TRV9UWVBFKTtcbiAgICBhdXRob3JpemF0aW9uVXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2NsaWVudF9pZCcsIGNsaWVudEluZm9ybWF0aW9uLmNsaWVudF9pZCk7XG4gICAgYXV0aG9yaXphdGlvblVybC5zZWFyY2hQYXJhbXMuc2V0KCdjb2RlX2NoYWxsZW5nZScsIGNvZGVDaGFsbGVuZ2UpO1xuICAgIGF1dGhvcml6YXRpb25Vcmwuc2VhcmNoUGFyYW1zLnNldCgnY29kZV9jaGFsbGVuZ2VfbWV0aG9kJywgQVVUSE9SSVpBVElPTl9DT0RFX0NIQUxMRU5HRV9NRVRIT0QpO1xuICAgIGF1dGhvcml6YXRpb25Vcmwuc2VhcmNoUGFyYW1zLnNldCgncmVkaXJlY3RfdXJpJywgU3RyaW5nKHJlZGlyZWN0VXJsKSk7XG4gICAgaWYgKHN0YXRlKSB7XG4gICAgICAgIGF1dGhvcml6YXRpb25Vcmwuc2VhcmNoUGFyYW1zLnNldCgnc3RhdGUnLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmIChzY29wZSkge1xuICAgICAgICBhdXRob3JpemF0aW9uVXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3Njb3BlJywgc2NvcGUpO1xuICAgIH1cbiAgICBpZiAoc2NvcGU/LmluY2x1ZGVzKCdvZmZsaW5lX2FjY2VzcycpKSB7XG4gICAgICAgIC8vIGlmIHRoZSByZXF1ZXN0IGluY2x1ZGVzIHRoZSBPSURDLW9ubHkgXCJvZmZsaW5lX2FjY2Vzc1wiIHNjb3BlLFxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHNldCB0aGUgcHJvbXB0IHRvIFwiY29uc2VudFwiIHRvIGVuc3VyZSB0aGUgdXNlciBpcyBwcm9tcHRlZCB0byBncmFudCBvZmZsaW5lIGFjY2Vzc1xuICAgICAgICAvLyBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNPZmZsaW5lQWNjZXNzXG4gICAgICAgIGF1dGhvcml6YXRpb25Vcmwuc2VhcmNoUGFyYW1zLmFwcGVuZCgncHJvbXB0JywgJ2NvbnNlbnQnKTtcbiAgICB9XG4gICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGF1dGhvcml6YXRpb25Vcmwuc2VhcmNoUGFyYW1zLnNldCgncmVzb3VyY2UnLCByZXNvdXJjZS5ocmVmKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYXV0aG9yaXphdGlvblVybCwgY29kZVZlcmlmaWVyIH07XG59XG4vKipcbiAqIFByZXBhcmVzIHRva2VuIHJlcXVlc3QgcGFyYW1ldGVycyBmb3IgYW4gYXV0aG9yaXphdGlvbiBjb2RlIGV4Y2hhbmdlLlxuICpcbiAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdXNlZCBieSBmZXRjaFRva2VuIHdoZW4gdGhlIHByb3ZpZGVyXG4gKiBkb2Vzbid0IGltcGxlbWVudCBwcmVwYXJlVG9rZW5SZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSBhdXRob3JpemF0aW9uQ29kZSAtIFRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmVjZWl2ZWQgZnJvbSB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludFxuICogQHBhcmFtIGNvZGVWZXJpZmllciAtIFRoZSBQS0NFIGNvZGUgdmVyaWZpZXJcbiAqIEBwYXJhbSByZWRpcmVjdFVyaSAtIFRoZSByZWRpcmVjdCBVUkkgdXNlZCBpbiB0aGUgYXV0aG9yaXphdGlvbiByZXF1ZXN0XG4gKiBAcmV0dXJucyBVUkxTZWFyY2hQYXJhbXMgZm9yIHRoZSBhdXRob3JpemF0aW9uX2NvZGUgZ3JhbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVBdXRob3JpemF0aW9uQ29kZVJlcXVlc3QoYXV0aG9yaXphdGlvbkNvZGUsIGNvZGVWZXJpZmllciwgcmVkaXJlY3RVcmkpIHtcbiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgICBjb2RlOiBhdXRob3JpemF0aW9uQ29kZSxcbiAgICAgICAgY29kZV92ZXJpZmllcjogY29kZVZlcmlmaWVyLFxuICAgICAgICByZWRpcmVjdF91cmk6IFN0cmluZyhyZWRpcmVjdFVyaSlcbiAgICB9KTtcbn1cbi8qKlxuICogSW50ZXJuYWwgaGVscGVyIHRvIGV4ZWN1dGUgYSB0b2tlbiByZXF1ZXN0IHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuXG4gKiBVc2VkIGJ5IGV4Y2hhbmdlQXV0aG9yaXphdGlvbiwgcmVmcmVzaEF1dGhvcml6YXRpb24sIGFuZCBmZXRjaFRva2VuLlxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlVG9rZW5SZXF1ZXN0KGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwsIHsgbWV0YWRhdGEsIHRva2VuUmVxdWVzdFBhcmFtcywgY2xpZW50SW5mb3JtYXRpb24sIGFkZENsaWVudEF1dGhlbnRpY2F0aW9uLCByZXNvdXJjZSwgZmV0Y2hGbiB9KSB7XG4gICAgY29uc3QgdG9rZW5VcmwgPSBtZXRhZGF0YT8udG9rZW5fZW5kcG9pbnQgPyBuZXcgVVJMKG1ldGFkYXRhLnRva2VuX2VuZHBvaW50KSA6IG5ldyBVUkwoJy90b2tlbicsIGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbidcbiAgICB9KTtcbiAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgdG9rZW5SZXF1ZXN0UGFyYW1zLnNldCgncmVzb3VyY2UnLCByZXNvdXJjZS5ocmVmKTtcbiAgICB9XG4gICAgaWYgKGFkZENsaWVudEF1dGhlbnRpY2F0aW9uKSB7XG4gICAgICAgIGF3YWl0IGFkZENsaWVudEF1dGhlbnRpY2F0aW9uKGhlYWRlcnMsIHRva2VuUmVxdWVzdFBhcmFtcywgdG9rZW5VcmwsIG1ldGFkYXRhKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2xpZW50SW5mb3JtYXRpb24pIHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydGVkTWV0aG9kcyA9IG1ldGFkYXRhPy50b2tlbl9lbmRwb2ludF9hdXRoX21ldGhvZHNfc3VwcG9ydGVkID8/IFtdO1xuICAgICAgICBjb25zdCBhdXRoTWV0aG9kID0gc2VsZWN0Q2xpZW50QXV0aE1ldGhvZChjbGllbnRJbmZvcm1hdGlvbiwgc3VwcG9ydGVkTWV0aG9kcyk7XG4gICAgICAgIGFwcGx5Q2xpZW50QXV0aGVudGljYXRpb24oYXV0aE1ldGhvZCwgY2xpZW50SW5mb3JtYXRpb24sIGhlYWRlcnMsIHRva2VuUmVxdWVzdFBhcmFtcyk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgKGZldGNoRm4gPz8gZmV0Y2gpKHRva2VuVXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBib2R5OiB0b2tlblJlcXVlc3RQYXJhbXNcbiAgICB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IGF3YWl0IHBhcnNlRXJyb3JSZXNwb25zZShyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBPQXV0aFRva2Vuc1NjaGVtYS5wYXJzZShhd2FpdCByZXNwb25zZS5qc29uKCkpO1xufVxuLyoqXG4gKiBFeGNoYW5nZXMgYW4gYXV0aG9yaXphdGlvbiBjb2RlIGZvciBhbiBhY2Nlc3MgdG9rZW4gd2l0aCB0aGUgZ2l2ZW4gc2VydmVyLlxuICpcbiAqIFN1cHBvcnRzIG11bHRpcGxlIGNsaWVudCBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGFzIHNwZWNpZmllZCBpbiBPQXV0aCAyLjE6XG4gKiAtIEF1dG9tYXRpY2FsbHkgc2VsZWN0cyB0aGUgYmVzdCBhdXRoZW50aWNhdGlvbiBtZXRob2QgYmFzZWQgb24gc2VydmVyIHN1cHBvcnRcbiAqIC0gRmFsbHMgYmFjayB0byBhcHByb3ByaWF0ZSBkZWZhdWx0cyB3aGVuIHNlcnZlciBtZXRhZGF0YSBpcyB1bmF2YWlsYWJsZVxuICpcbiAqIEBwYXJhbSBhdXRob3JpemF0aW9uU2VydmVyVXJsIC0gVGhlIGF1dGhvcml6YXRpb24gc2VydmVyJ3MgYmFzZSBVUkxcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvYmplY3QgY29udGFpbmluZyBjbGllbnQgaW5mbywgYXV0aCBjb2RlLCBldGMuXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBPQXV0aCB0b2tlbnNcbiAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIHRva2VuIGV4Y2hhbmdlIGZhaWxzIG9yIGF1dGhlbnRpY2F0aW9uIGlzIGludmFsaWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4Y2hhbmdlQXV0aG9yaXphdGlvbihhdXRob3JpemF0aW9uU2VydmVyVXJsLCB7IG1ldGFkYXRhLCBjbGllbnRJbmZvcm1hdGlvbiwgYXV0aG9yaXphdGlvbkNvZGUsIGNvZGVWZXJpZmllciwgcmVkaXJlY3RVcmksIHJlc291cmNlLCBhZGRDbGllbnRBdXRoZW50aWNhdGlvbiwgZmV0Y2hGbiB9KSB7XG4gICAgY29uc3QgdG9rZW5SZXF1ZXN0UGFyYW1zID0gcHJlcGFyZUF1dGhvcml6YXRpb25Db2RlUmVxdWVzdChhdXRob3JpemF0aW9uQ29kZSwgY29kZVZlcmlmaWVyLCByZWRpcmVjdFVyaSk7XG4gICAgcmV0dXJuIGV4ZWN1dGVUb2tlblJlcXVlc3QoYXV0aG9yaXphdGlvblNlcnZlclVybCwge1xuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgdG9rZW5SZXF1ZXN0UGFyYW1zLFxuICAgICAgICBjbGllbnRJbmZvcm1hdGlvbixcbiAgICAgICAgYWRkQ2xpZW50QXV0aGVudGljYXRpb24sXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICBmZXRjaEZuXG4gICAgfSk7XG59XG4vKipcbiAqIEV4Y2hhbmdlIGEgcmVmcmVzaCB0b2tlbiBmb3IgYW4gdXBkYXRlZCBhY2Nlc3MgdG9rZW4uXG4gKlxuICogU3VwcG9ydHMgbXVsdGlwbGUgY2xpZW50IGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgYXMgc3BlY2lmaWVkIGluIE9BdXRoIDIuMTpcbiAqIC0gQXV0b21hdGljYWxseSBzZWxlY3RzIHRoZSBiZXN0IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBiYXNlZCBvbiBzZXJ2ZXIgc3VwcG9ydFxuICogLSBQcmVzZXJ2ZXMgdGhlIG9yaWdpbmFsIHJlZnJlc2ggdG9rZW4gaWYgYSBuZXcgb25lIGlzIG5vdCByZXR1cm5lZFxuICpcbiAqIEBwYXJhbSBhdXRob3JpemF0aW9uU2VydmVyVXJsIC0gVGhlIGF1dGhvcml6YXRpb24gc2VydmVyJ3MgYmFzZSBVUkxcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvYmplY3QgY29udGFpbmluZyBjbGllbnQgaW5mbywgcmVmcmVzaCB0b2tlbiwgZXRjLlxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gT0F1dGggdG9rZW5zIChwcmVzZXJ2ZXMgb3JpZ2luYWwgcmVmcmVzaF90b2tlbiBpZiBub3QgcmVwbGFjZWQpXG4gKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiB0b2tlbiByZWZyZXNoIGZhaWxzIG9yIGF1dGhlbnRpY2F0aW9uIGlzIGludmFsaWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hBdXRob3JpemF0aW9uKGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwsIHsgbWV0YWRhdGEsIGNsaWVudEluZm9ybWF0aW9uLCByZWZyZXNoVG9rZW4sIHJlc291cmNlLCBhZGRDbGllbnRBdXRoZW50aWNhdGlvbiwgZmV0Y2hGbiB9KSB7XG4gICAgY29uc3QgdG9rZW5SZXF1ZXN0UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuXG4gICAgfSk7XG4gICAgY29uc3QgdG9rZW5zID0gYXdhaXQgZXhlY3V0ZVRva2VuUmVxdWVzdChhdXRob3JpemF0aW9uU2VydmVyVXJsLCB7XG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICB0b2tlblJlcXVlc3RQYXJhbXMsXG4gICAgICAgIGNsaWVudEluZm9ybWF0aW9uLFxuICAgICAgICBhZGRDbGllbnRBdXRoZW50aWNhdGlvbixcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIGZldGNoRm5cbiAgICB9KTtcbiAgICAvLyBQcmVzZXJ2ZSBvcmlnaW5hbCByZWZyZXNoIHRva2VuIGlmIHNlcnZlciBkaWRuJ3QgcmV0dXJuIGEgbmV3IG9uZVxuICAgIHJldHVybiB7IHJlZnJlc2hfdG9rZW46IHJlZnJlc2hUb2tlbiwgLi4udG9rZW5zIH07XG59XG4vKipcbiAqIFVuaWZpZWQgdG9rZW4gZmV0Y2hpbmcgdGhhdCB3b3JrcyB3aXRoIGFueSBncmFudCB0eXBlIHZpYSBwcm92aWRlci5wcmVwYXJlVG9rZW5SZXF1ZXN0KCkuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIHNpbmdsZSBlbnRyeSBwb2ludCBmb3Igb2J0YWluaW5nIHRva2VucyByZWdhcmRsZXNzIG9mIHRoZVxuICogT0F1dGggZ3JhbnQgdHlwZS4gVGhlIHByb3ZpZGVyJ3MgcHJlcGFyZVRva2VuUmVxdWVzdCgpIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGdyYW50XG4gKiB0byB1c2UgYW5kIHN1cHBsaWVzIHRoZSBncmFudC1zcGVjaWZpYyBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBwcm92aWRlciAtIE9BdXRoIGNsaWVudCBwcm92aWRlciB0aGF0IGltcGxlbWVudHMgcHJlcGFyZVRva2VuUmVxdWVzdCgpXG4gKiBAcGFyYW0gYXV0aG9yaXphdGlvblNlcnZlclVybCAtIFRoZSBhdXRob3JpemF0aW9uIHNlcnZlcidzIGJhc2UgVVJMXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB0b2tlbiByZXF1ZXN0XG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBPQXV0aCB0b2tlbnNcbiAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIHByb3ZpZGVyIGRvZXNuJ3QgaW1wbGVtZW50IHByZXBhcmVUb2tlblJlcXVlc3Qgb3IgdG9rZW4gZmV0Y2ggZmFpbHNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUHJvdmlkZXIgZm9yIGNsaWVudF9jcmVkZW50aWFsczpcbiAqIGNsYXNzIE15UHJvdmlkZXIgaW1wbGVtZW50cyBPQXV0aENsaWVudFByb3ZpZGVyIHtcbiAqICAgcHJlcGFyZVRva2VuUmVxdWVzdChzY29wZSkge1xuICogICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBncmFudF90eXBlOiAnY2xpZW50X2NyZWRlbnRpYWxzJyB9KTtcbiAqICAgICBpZiAoc2NvcGUpIHBhcmFtcy5zZXQoJ3Njb3BlJywgc2NvcGUpO1xuICogICAgIHJldHVybiBwYXJhbXM7XG4gKiAgIH1cbiAqICAgLy8gLi4uIG90aGVyIG1ldGhvZHNcbiAqIH1cbiAqXG4gKiBjb25zdCB0b2tlbnMgPSBhd2FpdCBmZXRjaFRva2VuKHByb3ZpZGVyLCBhdXRoU2VydmVyVXJsLCB7IG1ldGFkYXRhIH0pO1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hUb2tlbihwcm92aWRlciwgYXV0aG9yaXphdGlvblNlcnZlclVybCwgeyBtZXRhZGF0YSwgcmVzb3VyY2UsIGF1dGhvcml6YXRpb25Db2RlLCBmZXRjaEZuIH0gPSB7fSkge1xuICAgIGNvbnN0IHNjb3BlID0gcHJvdmlkZXIuY2xpZW50TWV0YWRhdGEuc2NvcGU7XG4gICAgLy8gVXNlIHByb3ZpZGVyJ3MgcHJlcGFyZVRva2VuUmVxdWVzdCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gYXV0aG9yaXphdGlvbl9jb2RlXG4gICAgbGV0IHRva2VuUmVxdWVzdFBhcmFtcztcbiAgICBpZiAocHJvdmlkZXIucHJlcGFyZVRva2VuUmVxdWVzdCkge1xuICAgICAgICB0b2tlblJlcXVlc3RQYXJhbXMgPSBhd2FpdCBwcm92aWRlci5wcmVwYXJlVG9rZW5SZXF1ZXN0KHNjb3BlKTtcbiAgICB9XG4gICAgLy8gRGVmYXVsdCB0byBhdXRob3JpemF0aW9uX2NvZGUgZ3JhbnQgaWYgbm8gY3VzdG9tIHByZXBhcmVUb2tlblJlcXVlc3RcbiAgICBpZiAoIXRva2VuUmVxdWVzdFBhcmFtcykge1xuICAgICAgICBpZiAoIWF1dGhvcml6YXRpb25Db2RlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciBwcm92aWRlci5wcmVwYXJlVG9rZW5SZXF1ZXN0KCkgb3IgYXV0aG9yaXphdGlvbkNvZGUgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXByb3ZpZGVyLnJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZGlyZWN0VXJsIGlzIHJlcXVpcmVkIGZvciBhdXRob3JpemF0aW9uX2NvZGUgZmxvdycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZGVWZXJpZmllciA9IGF3YWl0IHByb3ZpZGVyLmNvZGVWZXJpZmllcigpO1xuICAgICAgICB0b2tlblJlcXVlc3RQYXJhbXMgPSBwcmVwYXJlQXV0aG9yaXphdGlvbkNvZGVSZXF1ZXN0KGF1dGhvcml6YXRpb25Db2RlLCBjb2RlVmVyaWZpZXIsIHByb3ZpZGVyLnJlZGlyZWN0VXJsKTtcbiAgICB9XG4gICAgY29uc3QgY2xpZW50SW5mb3JtYXRpb24gPSBhd2FpdCBwcm92aWRlci5jbGllbnRJbmZvcm1hdGlvbigpO1xuICAgIHJldHVybiBleGVjdXRlVG9rZW5SZXF1ZXN0KGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwsIHtcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIHRva2VuUmVxdWVzdFBhcmFtcyxcbiAgICAgICAgY2xpZW50SW5mb3JtYXRpb246IGNsaWVudEluZm9ybWF0aW9uID8/IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkQ2xpZW50QXV0aGVudGljYXRpb246IHByb3ZpZGVyLmFkZENsaWVudEF1dGhlbnRpY2F0aW9uLFxuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgZmV0Y2hGblxuICAgIH0pO1xufVxuLyoqXG4gKiBQZXJmb3JtcyBPQXV0aCAyLjAgRHluYW1pYyBDbGllbnQgUmVnaXN0cmF0aW9uIGFjY29yZGluZyB0byBSRkMgNzU5MS5cbiAqXG4gKiBJZiBgc2NvcGVgIGlzIHByb3ZpZGVkLCBpdCBvdmVycmlkZXMgYGNsaWVudE1ldGFkYXRhLnNjb3BlYCBpbiB0aGUgcmVnaXN0cmF0aW9uXG4gKiByZXF1ZXN0IGJvZHkuIFRoaXMgYWxsb3dzIGNhbGxlcnMgdG8gYXBwbHkgdGhlIFNjb3BlIFNlbGVjdGlvbiBTdHJhdGVneSAoU0VQLTgzNSlcbiAqIGNvbnNpc3RlbnRseSBhY3Jvc3MgYm90aCBEQ1IgYW5kIHRoZSBzdWJzZXF1ZW50IGF1dGhvcml6YXRpb24gcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyQ2xpZW50KGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwsIHsgbWV0YWRhdGEsIGNsaWVudE1ldGFkYXRhLCBzY29wZSwgZmV0Y2hGbiB9KSB7XG4gICAgbGV0IHJlZ2lzdHJhdGlvblVybDtcbiAgICBpZiAobWV0YWRhdGEpIHtcbiAgICAgICAgaWYgKCFtZXRhZGF0YS5yZWdpc3RyYXRpb25fZW5kcG9pbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb21wYXRpYmxlIGF1dGggc2VydmVyOiBkb2VzIG5vdCBzdXBwb3J0IGR5bmFtaWMgY2xpZW50IHJlZ2lzdHJhdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHJlZ2lzdHJhdGlvblVybCA9IG5ldyBVUkwobWV0YWRhdGEucmVnaXN0cmF0aW9uX2VuZHBvaW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlZ2lzdHJhdGlvblVybCA9IG5ldyBVUkwoJy9yZWdpc3RlcicsIGF1dGhvcml6YXRpb25TZXJ2ZXJVcmwpO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IChmZXRjaEZuID8/IGZldGNoKShyZWdpc3RyYXRpb25VcmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgLi4uY2xpZW50TWV0YWRhdGEsXG4gICAgICAgICAgICAuLi4oc2NvcGUgIT09IHVuZGVmaW5lZCA/IHsgc2NvcGUgfSA6IHt9KVxuICAgICAgICB9KVxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgYXdhaXQgcGFyc2VFcnJvclJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIE9BdXRoQ2xpZW50SW5mb3JtYXRpb25GdWxsU2NoZW1hLnBhcnNlKGF3YWl0IHJlc3BvbnNlLmpzb24oKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdXRoLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js":
/*!*****************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js ***!
\*****************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Client: () => (/* binding */ Client),\n/* harmony export */ getSupportedElicitationModes: () => (/* binding */ getSupportedElicitationModes)\n/* harmony export */ });\n/* harmony import */ var _shared_protocol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/protocol.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../types.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js\");\n/* harmony import */ var _validation_ajv_provider_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../validation/ajv-provider.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js\");\n/* harmony import */ var _server_zod_compat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../server/zod-compat.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js\");\n/* harmony import */ var _experimental_tasks_client_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../experimental/tasks/client.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/client.js\");\n/* harmony import */ var _experimental_tasks_helpers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../experimental/tasks/helpers.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js\");\n\n\n\n\n\n\n/**\n * Elicitation default application helper. Applies defaults to the data based on the schema.\n *\n * @param schema - The schema to apply defaults to.\n * @param data - The data to apply defaults to.\n */ function applyElicitationDefaults(schema, data) {\n if (!schema || data === null || typeof data !== 'object') return;\n // Handle object properties\n if (schema.type === 'object' && schema.properties && typeof schema.properties === 'object') {\n const obj = data;\n const props = schema.properties;\n for (const key of Object.keys(props)){\n const propSchema = props[key];\n // If missing or explicitly undefined, apply default if present\n if (obj[key] === undefined && Object.prototype.hasOwnProperty.call(propSchema, 'default')) {\n obj[key] = propSchema.default;\n }\n // Recurse into existing nested objects/arrays\n if (obj[key] !== undefined) {\n applyElicitationDefaults(propSchema, obj[key]);\n }\n }\n }\n if (Array.isArray(schema.anyOf)) {\n for (const sub of schema.anyOf){\n // Skip boolean schemas (true/false are valid JSON Schemas but have no defaults)\n if (typeof sub !== 'boolean') {\n applyElicitationDefaults(sub, data);\n }\n }\n }\n // Combine schemas\n if (Array.isArray(schema.oneOf)) {\n for (const sub of schema.oneOf){\n // Skip boolean schemas (true/false are valid JSON Schemas but have no defaults)\n if (typeof sub !== 'boolean') {\n applyElicitationDefaults(sub, data);\n }\n }\n }\n}\n/**\n * Determines which elicitation modes are supported based on declared client capabilities.\n *\n * According to the spec:\n * - An empty elicitation capability object defaults to form mode support (backwards compatibility)\n * - URL mode is only supported if explicitly declared\n *\n * @param capabilities - The client's elicitation capabilities\n * @returns An object indicating which modes are supported\n */ function getSupportedElicitationModes(capabilities) {\n if (!capabilities) {\n return {\n supportsFormMode: false,\n supportsUrlMode: false\n };\n }\n const hasFormCapability = capabilities.form !== undefined;\n const hasUrlCapability = capabilities.url !== undefined;\n // If neither form nor url are explicitly declared, form mode is supported (backwards compatibility)\n const supportsFormMode = hasFormCapability || !hasFormCapability && !hasUrlCapability;\n const supportsUrlMode = hasUrlCapability;\n return {\n supportsFormMode,\n supportsUrlMode\n };\n}\n/**\n * An MCP client on top of a pluggable transport.\n *\n * The client will automatically begin the initialization flow with the server when connect() is called.\n *\n * To use with custom types, extend the base Request/Notification/Result types and pass them as type parameters:\n *\n * ```typescript\n * // Custom schemas\n * const CustomRequestSchema = RequestSchema.extend({...})\n * const CustomNotificationSchema = NotificationSchema.extend({...})\n * const CustomResultSchema = ResultSchema.extend({...})\n *\n * // Type aliases\n * type CustomRequest = z.infer<typeof CustomRequestSchema>\n * type CustomNotification = z.infer<typeof CustomNotificationSchema>\n * type CustomResult = z.infer<typeof CustomResultSchema>\n *\n * // Create typed client\n * const client = new Client<CustomRequest, CustomNotification, CustomResult>({\n * name: \"CustomClient\",\n * version: \"1.0.0\"\n * })\n * ```\n */ class Client extends _shared_protocol_js__WEBPACK_IMPORTED_MODULE_0__.Protocol {\n /**\n * Initializes this client with the given name and version information.\n */ constructor(_clientInfo, options){\n super(options);\n this._clientInfo = _clientInfo;\n this._cachedToolOutputValidators = new Map();\n this._cachedKnownTaskTools = new Set();\n this._cachedRequiredTaskTools = new Set();\n this._listChangedDebounceTimers = new Map();\n this._capabilities = options?.capabilities ?? {};\n this._jsonSchemaValidator = options?.jsonSchemaValidator ?? new _validation_ajv_provider_js__WEBPACK_IMPORTED_MODULE_2__.AjvJsonSchemaValidator();\n // Store list changed config for setup after connection (when we know server capabilities)\n if (options?.listChanged) {\n this._pendingListChangedConfig = options.listChanged;\n }\n }\n /**\n * Set up handlers for list changed notifications based on config and server capabilities.\n * This should only be called after initialization when server capabilities are known.\n * Handlers are silently skipped if the server doesn't advertise the corresponding listChanged capability.\n * @internal\n */ _setupListChangedHandlers(config) {\n if (config.tools && this._serverCapabilities?.tools?.listChanged) {\n this._setupListChangedHandler('tools', _types_js__WEBPACK_IMPORTED_MODULE_1__.ToolListChangedNotificationSchema, config.tools, async ()=>{\n const result = await this.listTools();\n return result.tools;\n });\n }\n if (config.prompts && this._serverCapabilities?.prompts?.listChanged) {\n this._setupListChangedHandler('prompts', _types_js__WEBPACK_IMPORTED_MODULE_1__.PromptListChangedNotificationSchema, config.prompts, async ()=>{\n const result = await this.listPrompts();\n return result.prompts;\n });\n }\n if (config.resources && this._serverCapabilities?.resources?.listChanged) {\n this._setupListChangedHandler('resources', _types_js__WEBPACK_IMPORTED_MODULE_1__.ResourceListChangedNotificationSchema, config.resources, async ()=>{\n const result = await this.listResources();\n return result.resources;\n });\n }\n }\n /**\n * Access experimental features.\n *\n * WARNING: These APIs are experimental and may change without notice.\n *\n * @experimental\n */ get experimental() {\n if (!this._experimental) {\n this._experimental = {\n tasks: new _experimental_tasks_client_js__WEBPACK_IMPORTED_MODULE_4__.ExperimentalClientTasks(this)\n };\n }\n return this._experimental;\n }\n /**\n * Registers new capabilities. This can only be called before connecting to a transport.\n *\n * The new capabilities will be merged with any existing capabilities previously given (e.g., at initialization).\n */ registerCapabilities(capabilities) {\n if (this.transport) {\n throw new Error('Cannot register capabilities after connecting to transport');\n }\n this._capabilities = (0,_shared_protocol_js__WEBPACK_IMPORTED_MODULE_0__.mergeCapabilities)(this._capabilities, capabilities);\n }\n /**\n * Override request handler registration to enforce client-side validation for elicitation.\n */ setRequestHandler(requestSchema, handler) {\n const shape = (0,_server_zod_compat_js__WEBPACK_IMPORTED_MODULE_3__.getObjectShape)(requestSchema);\n const methodSchema = shape?.method;\n if (!methodSchema) {\n throw new Error('Schema is missing a method literal');\n }\n // Extract literal value using type-safe property access\n let methodValue;\n if ((0,_server_zod_compat_js__WEBPACK_IMPORTED_MODULE_3__.isZ4Schema)(methodSchema)) {\n const v4Schema = methodSchema;\n const v4Def = v4Schema._zod?.def;\n methodValue = v4Def?.value ?? v4Schema.value;\n } else {\n const v3Schema = methodSchema;\n const legacyDef = v3Schema._def;\n methodValue = legacyDef?.value ?? v3Schema.value;\n }\n if (typeof methodValue !== 'string') {\n throw new Error('Schema method literal must be a string');\n }\n const method = methodValue;\n if (method === 'elicitation/create') {\n const wrappedHandler = async (request, extra)=>{\n const validatedRequest = (0,_server_zod_compat_js__WEBPACK_IMPORTED_MODULE_3__.safeParse)(_types_js__WEBPACK_IMPORTED_MODULE_1__.ElicitRequestSchema, request);\n if (!validatedRequest.success) {\n // Type guard: if success is false, error is guaranteed to exist\n const errorMessage = validatedRequest.error instanceof Error ? validatedRequest.error.message : String(validatedRequest.error);\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Invalid elicitation request: ${errorMessage}`);\n }\n const { params } = validatedRequest.data;\n params.mode = params.mode ?? 'form';\n const { supportsFormMode, supportsUrlMode } = getSupportedElicitationModes(this._capabilities.elicitation);\n if (params.mode === 'form' && !supportsFormMode) {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, 'Client does not support form-mode elicitation requests');\n }\n if (params.mode === 'url' && !supportsUrlMode) {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, 'Client does not support URL-mode elicitation requests');\n }\n const result = await Promise.resolve(handler(request, extra));\n // When task creation is requested, validate and return CreateTaskResult\n if (params.task) {\n const taskValidationResult = (0,_server_zod_compat_js__WEBPACK_IMPORTED_MODULE_3__.safeParse)(_types_js__WEBPACK_IMPORTED_MODULE_1__.CreateTaskResultSchema, result);\n if (!taskValidationResult.success) {\n const errorMessage = taskValidationResult.error instanceof Error ? taskValidationResult.error.message : String(taskValidationResult.error);\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Invalid task creation result: ${errorMessage}`);\n }\n return taskValidationResult.data;\n }\n // For non-task requests, validate against ElicitResultSchema\n const validationResult = (0,_server_zod_compat_js__WEBPACK_IMPORTED_MODULE_3__.safeParse)(_types_js__WEBPACK_IMPORTED_MODULE_1__.ElicitResultSchema, result);\n if (!validationResult.success) {\n // Type guard: if success is false, error is guaranteed to exist\n const errorMessage = validationResult.error instanceof Error ? validationResult.error.message : String(validationResult.error);\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Invalid elicitation result: ${errorMessage}`);\n }\n const validatedResult = validationResult.data;\n const requestedSchema = params.mode === 'form' ? params.requestedSchema : undefined;\n if (params.mode === 'form' && validatedResult.action === 'accept' && validatedResult.content && requestedSchema) {\n if (this._capabilities.elicitation?.form?.applyDefaults) {\n try {\n applyElicitationDefaults(requestedSchema, validatedResult.content);\n } catch {\n // gracefully ignore errors in default application\n }\n }\n }\n return validatedResult;\n };\n // Install the wrapped handler\n return super.setRequestHandler(requestSchema, wrappedHandler);\n }\n if (method === 'sampling/createMessage') {\n const wrappedHandler = async (request, extra)=>{\n const validatedRequest = (0,_server_zod_compat_js__WEBPACK_IMPORTED_MODULE_3__.safeParse)(_types_js__WEBPACK_IMPORTED_MODULE_1__.CreateMessageRequestSchema, request);\n if (!validatedRequest.success) {\n const errorMessage = validatedRequest.error instanceof Error ? validatedRequest.error.message : String(validatedRequest.error);\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Invalid sampling request: ${errorMessage}`);\n }\n const { params } = validatedRequest.data;\n const result = await Promise.resolve(handler(request, extra));\n // When task creation is requested, validate and return CreateTaskResult\n if (params.task) {\n const taskValidationResult = (0,_server_zod_compat_js__WEBPACK_IMPORTED_MODULE_3__.safeParse)(_types_js__WEBPACK_IMPORTED_MODULE_1__.CreateTaskResultSchema, result);\n if (!taskValidationResult.success) {\n const errorMessage = taskValidationResult.error instanceof Error ? taskValidationResult.error.message : String(taskValidationResult.error);\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Invalid task creation result: ${errorMessage}`);\n }\n return taskValidationResult.data;\n }\n // For non-task requests, validate against appropriate schema based on tools presence\n const hasTools = params.tools || params.toolChoice;\n const resultSchema = hasTools ? _types_js__WEBPACK_IMPORTED_MODULE_1__.CreateMessageResultWithToolsSchema : _types_js__WEBPACK_IMPORTED_MODULE_1__.CreateMessageResultSchema;\n const validationResult = (0,_server_zod_compat_js__WEBPACK_IMPORTED_MODULE_3__.safeParse)(resultSchema, result);\n if (!validationResult.success) {\n const errorMessage = validationResult.error instanceof Error ? validationResult.error.message : String(validationResult.error);\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Invalid sampling result: ${errorMessage}`);\n }\n return validationResult.data;\n };\n // Install the wrapped handler\n return super.setRequestHandler(requestSchema, wrappedHandler);\n }\n // Other handlers use default behavior\n return super.setRequestHandler(requestSchema, handler);\n }\n assertCapability(capability, method) {\n if (!this._serverCapabilities?.[capability]) {\n throw new Error(`Server does not support ${capability} (required for ${method})`);\n }\n }\n async connect(transport, options) {\n await super.connect(transport);\n // When transport sessionId is already set this means we are trying to reconnect.\n // In this case we don't need to initialize again.\n if (transport.sessionId !== undefined) {\n return;\n }\n try {\n const result = await this.request({\n method: 'initialize',\n params: {\n protocolVersion: _types_js__WEBPACK_IMPORTED_MODULE_1__.LATEST_PROTOCOL_VERSION,\n capabilities: this._capabilities,\n clientInfo: this._clientInfo\n }\n }, _types_js__WEBPACK_IMPORTED_MODULE_1__.InitializeResultSchema, options);\n if (result === undefined) {\n throw new Error(`Server sent invalid initialize result: ${result}`);\n }\n if (!_types_js__WEBPACK_IMPORTED_MODULE_1__.SUPPORTED_PROTOCOL_VERSIONS.includes(result.protocolVersion)) {\n throw new Error(`Server's protocol version is not supported: ${result.protocolVersion}`);\n }\n this._serverCapabilities = result.capabilities;\n this._serverVersion = result.serverInfo;\n // HTTP transports must set the protocol version in each header after initialization.\n if (transport.setProtocolVersion) {\n transport.setProtocolVersion(result.protocolVersion);\n }\n this._instructions = result.instructions;\n await this.notification({\n method: 'notifications/initialized'\n });\n // Set up list changed handlers now that we know server capabilities\n if (this._pendingListChangedConfig) {\n this._setupListChangedHandlers(this._pendingListChangedConfig);\n this._pendingListChangedConfig = undefined;\n }\n } catch (error) {\n // Disconnect if initialization fails.\n void this.close();\n throw error;\n }\n }\n /**\n * After initialization has completed, this will be populated with the server's reported capabilities.\n */ getServerCapabilities() {\n return this._serverCapabilities;\n }\n /**\n * After initialization has completed, this will be populated with information about the server's name and version.\n */ getServerVersion() {\n return this._serverVersion;\n }\n /**\n * After initialization has completed, this may be populated with information about the server's instructions.\n */ getInstructions() {\n return this._instructions;\n }\n assertCapabilityForMethod(method) {\n switch(method){\n case 'logging/setLevel':\n if (!this._serverCapabilities?.logging) {\n throw new Error(`Server does not support logging (required for ${method})`);\n }\n break;\n case 'prompts/get':\n case 'prompts/list':\n if (!this._serverCapabilities?.prompts) {\n throw new Error(`Server does not support prompts (required for ${method})`);\n }\n break;\n case 'resources/list':\n case 'resources/templates/list':\n case 'resources/read':\n case 'resources/subscribe':\n case 'resources/unsubscribe':\n if (!this._serverCapabilities?.resources) {\n throw new Error(`Server does not support resources (required for ${method})`);\n }\n if (method === 'resources/subscribe' && !this._serverCapabilities.resources.subscribe) {\n throw new Error(`Server does not support resource subscriptions (required for ${method})`);\n }\n break;\n case 'tools/call':\n case 'tools/list':\n if (!this._serverCapabilities?.tools) {\n throw new Error(`Server does not support tools (required for ${method})`);\n }\n break;\n case 'completion/complete':\n if (!this._serverCapabilities?.completions) {\n throw new Error(`Server does not support completions (required for ${method})`);\n }\n break;\n case 'initialize':\n break;\n case 'ping':\n break;\n }\n }\n assertNotificationCapability(method) {\n switch(method){\n case 'notifications/roots/list_changed':\n if (!this._capabilities.roots?.listChanged) {\n throw new Error(`Client does not support roots list changed notifications (required for ${method})`);\n }\n break;\n case 'notifications/initialized':\n break;\n case 'notifications/cancelled':\n break;\n case 'notifications/progress':\n break;\n }\n }\n assertRequestHandlerCapability(method) {\n // Task handlers are registered in Protocol constructor before _capabilities is initialized\n // Skip capability check for task methods during initialization\n if (!this._capabilities) {\n return;\n }\n switch(method){\n case 'sampling/createMessage':\n if (!this._capabilities.sampling) {\n throw new Error(`Client does not support sampling capability (required for ${method})`);\n }\n break;\n case 'elicitation/create':\n if (!this._capabilities.elicitation) {\n throw new Error(`Client does not support elicitation capability (required for ${method})`);\n }\n break;\n case 'roots/list':\n if (!this._capabilities.roots) {\n throw new Error(`Client does not support roots capability (required for ${method})`);\n }\n break;\n case 'tasks/get':\n case 'tasks/list':\n case 'tasks/result':\n case 'tasks/cancel':\n if (!this._capabilities.tasks) {\n throw new Error(`Client does not support tasks capability (required for ${method})`);\n }\n break;\n case 'ping':\n break;\n }\n }\n assertTaskCapability(method) {\n (0,_experimental_tasks_helpers_js__WEBPACK_IMPORTED_MODULE_5__.assertToolsCallTaskCapability)(this._serverCapabilities?.tasks?.requests, method, 'Server');\n }\n assertTaskHandlerCapability(method) {\n // Task handlers are registered in Protocol constructor before _capabilities is initialized\n // Skip capability check for task methods during initialization\n if (!this._capabilities) {\n return;\n }\n (0,_experimental_tasks_helpers_js__WEBPACK_IMPORTED_MODULE_5__.assertClientRequestTaskCapability)(this._capabilities.tasks?.requests, method, 'Client');\n }\n async ping(options) {\n return this.request({\n method: 'ping'\n }, _types_js__WEBPACK_IMPORTED_MODULE_1__.EmptyResultSchema, options);\n }\n async complete(params, options) {\n return this.request({\n method: 'completion/complete',\n params\n }, _types_js__WEBPACK_IMPORTED_MODULE_1__.CompleteResultSchema, options);\n }\n async setLoggingLevel(level, options) {\n return this.request({\n method: 'logging/setLevel',\n params: {\n level\n }\n }, _types_js__WEBPACK_IMPORTED_MODULE_1__.EmptyResultSchema, options);\n }\n async getPrompt(params, options) {\n return this.request({\n method: 'prompts/get',\n params\n }, _types_js__WEBPACK_IMPORTED_MODULE_1__.GetPromptResultSchema, options);\n }\n async listPrompts(params, options) {\n return this.request({\n method: 'prompts/list',\n params\n }, _types_js__WEBPACK_IMPORTED_MODULE_1__.ListPromptsResultSchema, options);\n }\n async listResources(params, options) {\n return this.request({\n method: 'resources/list',\n params\n }, _types_js__WEBPACK_IMPORTED_MODULE_1__.ListResourcesResultSchema, options);\n }\n async listResourceTemplates(params, options) {\n return this.request({\n method: 'resources/templates/list',\n params\n }, _types_js__WEBPACK_IMPORTED_MODULE_1__.ListResourceTemplatesResultSchema, options);\n }\n async readResource(params, options) {\n return this.request({\n method: 'resources/read',\n params\n }, _types_js__WEBPACK_IMPORTED_MODULE_1__.ReadResourceResultSchema, options);\n }\n async subscribeResource(params, options) {\n return this.request({\n method: 'resources/subscribe',\n params\n }, _types_js__WEBPACK_IMPORTED_MODULE_1__.EmptyResultSchema, options);\n }\n async unsubscribeResource(params, options) {\n return this.request({\n method: 'resources/unsubscribe',\n params\n }, _types_js__WEBPACK_IMPORTED_MODULE_1__.EmptyResultSchema, options);\n }\n /**\n * Calls a tool and waits for the result. Automatically validates structured output if the tool has an outputSchema.\n *\n * For task-based execution with streaming behavior, use client.experimental.tasks.callToolStream() instead.\n */ async callTool(params, resultSchema = _types_js__WEBPACK_IMPORTED_MODULE_1__.CallToolResultSchema, options) {\n // Guard: required-task tools need experimental API\n if (this.isToolTaskRequired(params.name)) {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidRequest, `Tool \"${params.name}\" requires task-based execution. Use client.experimental.tasks.callToolStream() instead.`);\n }\n const result = await this.request({\n method: 'tools/call',\n params\n }, resultSchema, options);\n // Check if the tool has an outputSchema\n const validator = this.getToolOutputValidator(params.name);\n if (validator) {\n // If tool has outputSchema, it MUST return structuredContent (unless it's an error)\n if (!result.structuredContent && !result.isError) {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidRequest, `Tool ${params.name} has an output schema but did not return structured content`);\n }\n // Only validate structured content if present (not when there's an error)\n if (result.structuredContent) {\n try {\n // Validate the structured content against the schema\n const validationResult = validator(result.structuredContent);\n if (!validationResult.valid) {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Structured content does not match the tool's output schema: ${validationResult.errorMessage}`);\n }\n } catch (error) {\n if (error instanceof _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError) {\n throw error;\n }\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Failed to validate structured content: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n }\n return result;\n }\n isToolTask(toolName) {\n if (!this._serverCapabilities?.tasks?.requests?.tools?.call) {\n return false;\n }\n return this._cachedKnownTaskTools.has(toolName);\n }\n /**\n * Check if a tool requires task-based execution.\n * Unlike isToolTask which includes 'optional' tools, this only checks for 'required'.\n */ isToolTaskRequired(toolName) {\n return this._cachedRequiredTaskTools.has(toolName);\n }\n /**\n * Cache validators for tool output schemas.\n * Called after listTools() to pre-compile validators for better performance.\n */ cacheToolMetadata(tools) {\n this._cachedToolOutputValidators.clear();\n this._cachedKnownTaskTools.clear();\n this._cachedRequiredTaskTools.clear();\n for (const tool of tools){\n // If the tool has an outputSchema, create and cache the validator\n if (tool.outputSchema) {\n const toolValidator = this._jsonSchemaValidator.getValidator(tool.outputSchema);\n this._cachedToolOutputValidators.set(tool.name, toolValidator);\n }\n // If the tool supports task-based execution, cache that information\n const taskSupport = tool.execution?.taskSupport;\n if (taskSupport === 'required' || taskSupport === 'optional') {\n this._cachedKnownTaskTools.add(tool.name);\n }\n if (taskSupport === 'required') {\n this._cachedRequiredTaskTools.add(tool.name);\n }\n }\n }\n /**\n * Get cached validator for a tool\n */ getToolOutputValidator(toolName) {\n return this._cachedToolOutputValidators.get(toolName);\n }\n async listTools(params, options) {\n const result = await this.request({\n method: 'tools/list',\n params\n }, _types_js__WEBPACK_IMPORTED_MODULE_1__.ListToolsResultSchema, options);\n // Cache the tools and their output schemas for future validation\n this.cacheToolMetadata(result.tools);\n return result;\n }\n /**\n * Set up a single list changed handler.\n * @internal\n */ _setupListChangedHandler(listType, notificationSchema, options, fetcher) {\n // Validate options using Zod schema (validates autoRefresh and debounceMs)\n const parseResult = _types_js__WEBPACK_IMPORTED_MODULE_1__.ListChangedOptionsBaseSchema.safeParse(options);\n if (!parseResult.success) {\n throw new Error(`Invalid ${listType} listChanged options: ${parseResult.error.message}`);\n }\n // Validate callback\n if (typeof options.onChanged !== 'function') {\n throw new Error(`Invalid ${listType} listChanged options: onChanged must be a function`);\n }\n const { autoRefresh, debounceMs } = parseResult.data;\n const { onChanged } = options;\n const refresh = async ()=>{\n if (!autoRefresh) {\n onChanged(null, null);\n return;\n }\n try {\n const items = await fetcher();\n onChanged(null, items);\n } catch (e) {\n const error = e instanceof Error ? e : new Error(String(e));\n onChanged(error, null);\n }\n };\n const handler = ()=>{\n if (debounceMs) {\n // Clear any pending debounce timer for this list type\n const existingTimer = this._listChangedDebounceTimers.get(listType);\n if (existingTimer) {\n clearTimeout(existingTimer);\n }\n // Set up debounced refresh\n const timer = setTimeout(refresh, debounceMs);\n this._listChangedDebounceTimers.set(listType, timer);\n } else {\n // No debounce, refresh immediately\n refresh();\n }\n };\n // Register notification handler\n this.setNotificationHandler(notificationSchema, handler);\n }\n async sendRootsListChanged() {\n return this.notification({\n method: 'notifications/roots/list_changed'\n });\n }\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vY2xpZW50L2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQStHO0FBb0QxRjtBQUNrRDtBQVV0QztBQUV5QztBQUMwQztBQUVwSDs7Ozs7R0FLRyxDQUNILFNBQVMsd0JBQXdCLENBQUMsTUFBa0MsRUFBRSxJQUFhO0lBQy9FLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsT0FBTztJQUVqRSwyQkFBMkI7SUFDM0IsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLE9BQU8sTUFBTSxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN6RixNQUFNLEdBQUcsR0FBRyxJQUErQixDQUFDO1FBQzVDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFvRSxDQUFDO1FBQzFGLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBRSxDQUFDO1lBQ25DLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QiwrREFBK0Q7WUFDL0QsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDeEYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDbEMsQ0FBQztZQUNELDhDQUE4QztZQUM5QyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FB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TSxPQUFPLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2Isc0RBQXNEO2dCQUN0RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNoQixZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2hDLENBQUM7Z0JBRUQsMkJBQTJCO2dCQUMzQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RCxDQUFDLE1BQU0sQ0FBQztnQkFDSixtQ0FBbUM7Z0JBQ25DLE9BQU8sRUFBRSxDQUFDO1lBQ2QsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsa0JBQXFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQUUsTUFBTSxFQUFFLGtDQUFrQztRQUFBLENBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7Q0FDSiIsInNvdXJjZXMiOlsiL1VzZXJzL3NyYy9jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/client/sse.js":
/*!***************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/client/sse.js ***!
\***************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SSEClientTransport: () => (/* binding */ SSEClientTransport),\n/* harmony export */ SseError: () => (/* binding */ SseError)\n/* harmony export */ });\n/* harmony import */ var eventsource__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! eventsource */ \"(rsc)/./node_modules/.pnpm/eventsource@3.0.7/node_modules/eventsource/dist/index.js\");\n/* harmony import */ var _shared_transport_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/transport.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../types.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js\");\n/* harmony import */ var _auth_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./auth.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js\");\n\n\n\n\nclass SseError extends Error {\n constructor(code, message, event) {\n super(`SSE error: ${message}`);\n this.code = code;\n this.event = event;\n }\n}\n/**\n * Client transport for SSE: this will connect to a server using Server-Sent Events for receiving\n * messages and make separate POST requests for sending messages.\n * @deprecated SSEClientTransport is deprecated. Prefer to use StreamableHTTPClientTransport where possible instead. Note that because some servers are still using SSE, clients may need to support both transports during the migration period.\n */\nclass SSEClientTransport {\n constructor(url, opts) {\n this._url = url;\n this._resourceMetadataUrl = undefined;\n this._scope = undefined;\n this._eventSourceInit = opts?.eventSourceInit;\n this._requestInit = opts?.requestInit;\n this._authProvider = opts?.authProvider;\n this._fetch = opts?.fetch;\n this._fetchWithInit = (0,_shared_transport_js__WEBPACK_IMPORTED_MODULE_0__.createFetchWithInit)(opts?.fetch, opts?.requestInit);\n }\n async _authThenStart() {\n if (!this._authProvider) {\n throw new _auth_js__WEBPACK_IMPORTED_MODULE_2__.UnauthorizedError('No auth provider');\n }\n let result;\n try {\n result = await (0,_auth_js__WEBPACK_IMPORTED_MODULE_2__.auth)(this._authProvider, {\n serverUrl: this._url,\n resourceMetadataUrl: this._resourceMetadataUrl,\n scope: this._scope,\n fetchFn: this._fetchWithInit\n });\n }\n catch (error) {\n this.onerror?.(error);\n throw error;\n }\n if (result !== 'AUTHORIZED') {\n throw new _auth_js__WEBPACK_IMPORTED_MODULE_2__.UnauthorizedError();\n }\n return await this._startOrAuth();\n }\n async _commonHeaders() {\n const headers = {};\n if (this._authProvider) {\n const tokens = await this._authProvider.tokens();\n if (tokens) {\n headers['Authorization'] = `Bearer ${tokens.access_token}`;\n }\n }\n if (this._protocolVersion) {\n headers['mcp-protocol-version'] = this._protocolVersion;\n }\n const extraHeaders = (0,_shared_transport_js__WEBPACK_IMPORTED_MODULE_0__.normalizeHeaders)(this._requestInit?.headers);\n return new Headers({\n ...headers,\n ...extraHeaders\n });\n }\n _startOrAuth() {\n const fetchImpl = (this?._eventSourceInit?.fetch ?? this._fetch ?? fetch);\n return new Promise((resolve, reject) => {\n this._eventSource = new eventsource__WEBPACK_IMPORTED_MODULE_3__.EventSource(this._url.href, {\n ...this._eventSourceInit,\n fetch: async (url, init) => {\n const headers = await this._commonHeaders();\n headers.set('Accept', 'text/event-stream');\n const response = await fetchImpl(url, {\n ...init,\n headers\n });\n if (response.status === 401 && response.headers.has('www-authenticate')) {\n const { resourceMetadataUrl, scope } = (0,_auth_js__WEBPACK_IMPORTED_MODULE_2__.extractWWWAuthenticateParams)(response);\n this._resourceMetadataUrl = resourceMetadataUrl;\n this._scope = scope;\n }\n return response;\n }\n });\n this._abortController = new AbortController();\n this._eventSource.onerror = event => {\n if (event.code === 401 && this._authProvider) {\n this._authThenStart().then(resolve, reject);\n return;\n }\n const error = new SseError(event.code, event.message, event);\n reject(error);\n this.onerror?.(error);\n };\n this._eventSource.onopen = () => {\n // The connection is open, but we need to wait for the endpoint to be received.\n };\n this._eventSource.addEventListener('endpoint', (event) => {\n const messageEvent = event;\n try {\n this._endpoint = new URL(messageEvent.data, this._url);\n if (this._endpoint.origin !== this._url.origin) {\n throw new Error(`Endpoint origin does not match connection origin: ${this._endpoint.origin}`);\n }\n }\n catch (error) {\n reject(error);\n this.onerror?.(error);\n void this.close();\n return;\n }\n resolve();\n });\n this._eventSource.onmessage = (event) => {\n const messageEvent = event;\n let message;\n try {\n message = _types_js__WEBPACK_IMPORTED_MODULE_1__.JSONRPCMessageSchema.parse(JSON.parse(messageEvent.data));\n }\n catch (error) {\n this.onerror?.(error);\n return;\n }\n this.onmessage?.(message);\n };\n });\n }\n async start() {\n if (this._eventSource) {\n throw new Error('SSEClientTransport already started! If using Client class, note that connect() calls start() automatically.');\n }\n return await this._startOrAuth();\n }\n /**\n * Call this method after the user has finished authorizing via their user agent and is redirected back to the MCP client application. This will exchange the authorization code for an access token, enabling the next connection attempt to successfully auth.\n */\n async finishAuth(authorizationCode) {\n if (!this._authProvider) {\n throw new _auth_js__WEBPACK_IMPORTED_MODULE_2__.UnauthorizedError('No auth provider');\n }\n const result = await (0,_auth_js__WEBPACK_IMPORTED_MODULE_2__.auth)(this._authProvider, {\n serverUrl: this._url,\n authorizationCode,\n resourceMetadataUrl: this._resourceMetadataUrl,\n scope: this._scope,\n fetchFn: this._fetchWithInit\n });\n if (result !== 'AUTHORIZED') {\n throw new _auth_js__WEBPACK_IMPORTED_MODULE_2__.UnauthorizedError('Failed to authorize');\n }\n }\n async close() {\n this._abortController?.abort();\n this._eventSource?.close();\n this.onclose?.();\n }\n async send(message) {\n if (!this._endpoint) {\n throw new Error('Not connected');\n }\n try {\n const headers = await this._commonHeaders();\n headers.set('content-type', 'application/json');\n const init = {\n ...this._requestInit,\n method: 'POST',\n headers,\n body: JSON.stringify(message),\n signal: this._abortController?.signal\n };\n const response = await (this._fetch ?? fetch)(this._endpoint, init);\n if (!response.ok) {\n const text = await response.text().catch(() => null);\n if (response.status === 401 && this._authProvider) {\n const { resourceMetadataUrl, scope } = (0,_auth_js__WEBPACK_IMPORTED_MODULE_2__.extractWWWAuthenticateParams)(response);\n this._resourceMetadataUrl = resourceMetadataUrl;\n this._scope = scope;\n const result = await (0,_auth_js__WEBPACK_IMPORTED_MODULE_2__.auth)(this._authProvider, {\n serverUrl: this._url,\n resourceMetadataUrl: this._resourceMetadataUrl,\n scope: this._scope,\n fetchFn: this._fetchWithInit\n });\n if (result !== 'AUTHORIZED') {\n throw new _auth_js__WEBPACK_IMPORTED_MODULE_2__.UnauthorizedError();\n }\n // Purposely _not_ awaited, so we don't call onerror twice\n return this.send(message);\n }\n throw new Error(`Error POSTing to endpoint (HTTP ${response.status}): ${text}`);\n }\n // Release connection - POST responses don't have content we need\n await response.body?.cancel();\n }\n catch (error) {\n this.onerror?.(error);\n throw error;\n }\n }\n setProtocolVersion(version) {\n this._protocolVersion = version;\n }\n}\n//# sourceMappingURL=sse.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vY2xpZW50L3NzZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBMEM7QUFDcUM7QUFDNUI7QUFDK0I7QUFDM0U7QUFDUDtBQUNBLDRCQUE0QixRQUFRO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qix5RUFBbUI7QUFDakQ7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHVEQUFpQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsOENBQUk7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHVEQUFpQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELG9CQUFvQjtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLHNFQUFnQjtBQUM3QztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msb0RBQVc7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxnQ0FBZ0MsNkJBQTZCLEVBQUUsc0VBQTRCO0FBQzNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkZBQTZGLHNCQUFzQjtBQUNuSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsMkRBQW9CO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix1REFBaUI7QUFDdkM7QUFDQSw2QkFBNkIsOENBQUk7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLHNCQUFzQix1REFBaUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsNkJBQTZCLEVBQUUsc0VBQTRCO0FBQ3ZGO0FBQ0E7QUFDQSx5Q0FBeUMsOENBQUk7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxrQ0FBa0MsdURBQWlCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FLGdCQUFnQixLQUFLLEtBQUs7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9kZWxjb250ZXh0cHJvdG9jb2wrc2RrQDEuMjkuMF96b2RAMy4yNS43Ni9ub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9kaXN0L2VzbS9jbGllbnQvc3NlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50U291cmNlIH0gZnJvbSAnZXZlbnRzb3VyY2UnO1xuaW1wb3J0IHsgY3JlYXRlRmV0Y2hXaXRoSW5pdCwgbm9ybWFsaXplSGVhZGVycyB9IGZyb20gJy4uL3NoYXJlZC90cmFuc3BvcnQuanMnO1xuaW1wb3J0IHsgSlNPTlJQQ01lc3NhZ2VTY2hlbWEgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBhdXRoLCBleHRyYWN0V1dXQXV0aGVudGljYXRlUGFyYW1zLCBVbmF1dGhvcml6ZWRFcnJvciB9IGZyb20gJy4vYXV0aC5qcyc7XG5leHBvcnQgY2xhc3MgU3NlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoY29kZSwgbWVzc2FnZSwgZXZlbnQpIHtcbiAgICAgICAgc3VwZXIoYFNTRSBlcnJvcjogJHttZXNzYWdlfWApO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XG4gICAgfVxufVxuLyoqXG4gKiBDbGllbnQgdHJhbnNwb3J0IGZvciBTU0U6IHRoaXMgd2lsbCBjb25uZWN0IHRvIGEgc2VydmVyIHVzaW5nIFNlcnZlci1TZW50IEV2ZW50cyBmb3IgcmVjZWl2aW5nXG4gKiBtZXNzYWdlcyBhbmQgbWFrZSBzZXBhcmF0ZSBQT1NUIHJlcXVlc3RzIGZvciBzZW5kaW5nIG1lc3NhZ2VzLlxuICogQGRlcHJlY2F0ZWQgU1NFQ2xpZW50VHJhbnNwb3J0IGlzIGRlcHJlY2F0ZWQuIFByZWZlciB0byB1c2UgU3RyZWFtYWJsZUhUVFBDbGllbnRUcmFuc3BvcnQgd2hlcmUgcG9zc2libGUgaW5zdGVhZC4gTm90ZSB0aGF0IGJlY2F1c2Ugc29tZSBzZXJ2ZXJzIGFyZSBzdGlsbCB1c2luZyBTU0UsIGNsaWVudHMgbWF5IG5lZWQgdG8gc3VwcG9ydCBib3RoIHRyYW5zcG9ydHMgZHVyaW5nIHRoZSBtaWdyYXRpb24gcGVyaW9kLlxuICovXG5leHBvcnQgY2xhc3MgU1NFQ2xpZW50VHJhbnNwb3J0IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5fdXJsID0gdXJsO1xuICAgICAgICB0aGlzLl9yZXNvdXJjZU1ldGFkYXRhVXJsID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9zY29wZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fZXZlbnRTb3VyY2VJbml0ID0gb3B0cz8uZXZlbnRTb3VyY2VJbml0O1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SW5pdCA9IG9wdHM/LnJlcXVlc3RJbml0O1xuICAgICAgICB0aGlzLl9hdXRoUHJvdmlkZXIgPSBvcHRzPy5hdXRoUHJvdmlkZXI7XG4gICAgICAgIHRoaXMuX2ZldGNoID0gb3B0cz8uZmV0Y2g7XG4gICAgICAgIHRoaXMuX2ZldGNoV2l0aEluaXQgPSBjcmVhdGVGZXRjaFdpdGhJbml0KG9wdHM/LmZldGNoLCBvcHRzPy5yZXF1ZXN0SW5pdCk7XG4gICAgfVxuICAgIGFzeW5jIF9hdXRoVGhlblN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuX2F1dGhQcm92aWRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFVuYXV0aG9yaXplZEVycm9yKCdObyBhdXRoIHByb3ZpZGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGF1dGgodGhpcy5fYXV0aFByb3ZpZGVyLCB7XG4gICAgICAgICAgICAgICAgc2VydmVyVXJsOiB0aGlzLl91cmwsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VNZXRhZGF0YVVybDogdGhpcy5fcmVzb3VyY2VNZXRhZGF0YVVybCxcbiAgICAgICAgICAgICAgICBzY29wZTogdGhpcy5fc2NvcGUsXG4gICAgICAgICAgICAgICAgZmV0Y2hGbjogdGhpcy5fZmV0Y2hXaXRoSW5pdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLm9uZXJyb3I/LihlcnJvcik7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ICE9PSAnQVVUSE9SSVpFRCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBVbmF1dGhvcml6ZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9zdGFydE9yQXV0aCgpO1xuICAgIH1cbiAgICBhc3luYyBfY29tbW9uSGVhZGVycygpIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgICBpZiAodGhpcy5fYXV0aFByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbnMgPSBhd2FpdCB0aGlzLl9hdXRoUHJvdmlkZXIudG9rZW5zKCk7XG4gICAgICAgICAgICBpZiAodG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke3Rva2Vucy5hY2Nlc3NfdG9rZW59YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcHJvdG9jb2xWZXJzaW9uKSB7XG4gICAgICAgICAgICBoZWFkZXJzWydtY3AtcHJvdG9jb2wtdmVyc2lvbiddID0gdGhpcy5fcHJvdG9jb2xWZXJzaW9uO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4dHJhSGVhZGVycyA9IG5vcm1hbGl6ZUhlYWRlcnModGhpcy5fcmVxdWVzdEluaXQ/LmhlYWRlcnMpO1xuICAgICAgICByZXR1cm4gbmV3IEhlYWRlcnMoe1xuICAgICAgICAgICAgLi4uaGVhZGVycyxcbiAgICAgICAgICAgIC4uLmV4dHJhSGVhZGVyc1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3N0YXJ0T3JBdXRoKCkge1xuICAgICAgICBjb25zdCBmZXRjaEltcGwgPSAodGhpcz8uX2V2ZW50U291cmNlSW5pdD8uZmV0Y2ggPz8gdGhpcy5fZmV0Y2ggPz8gZmV0Y2gpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UodGhpcy5fdXJsLmhyZWYsIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9ldmVudFNvdXJjZUluaXQsXG4gICAgICAgICAgICAgICAgZmV0Y2g6IGFzeW5jICh1cmwsIGluaXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IGF3YWl0IHRoaXMuX2NvbW1vbkhlYWRlcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVycy5zZXQoJ0FjY2VwdCcsICd0ZXh0L2V2ZW50LXN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoSW1wbCh1cmwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmluaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgcmVzcG9uc2UuaGVhZGVycy5oYXMoJ3d3dy1hdXRoZW50aWNhdGUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByZXNvdXJjZU1ldGFkYXRhVXJsLCBzY29wZSB9ID0gZXh0cmFjdFdXV0F1dGhlbnRpY2F0ZVBhcmFtcyhyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZU1ldGFkYXRhVXJsID0gcmVzb3VyY2VNZXRhZGF0YVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Njb3BlID0gc2NvcGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRTb3VyY2Uub25lcnJvciA9IGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gNDAxICYmIHRoaXMuX2F1dGhQcm92aWRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdXRoVGhlblN0YXJ0KCkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFNzZUVycm9yKGV2ZW50LmNvZGUsIGV2ZW50Lm1lc3NhZ2UsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMub25lcnJvcj8uKGVycm9yKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLl9ldmVudFNvdXJjZS5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGNvbm5lY3Rpb24gaXMgb3BlbiwgYnV0IHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGVuZHBvaW50IHRvIGJlIHJlY2VpdmVkLlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50U291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZHBvaW50JywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZUV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW5kcG9pbnQgPSBuZXcgVVJMKG1lc3NhZ2VFdmVudC5kYXRhLCB0aGlzLl91cmwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZW5kcG9pbnQub3JpZ2luICE9PSB0aGlzLl91cmwub3JpZ2luKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuZHBvaW50IG9yaWdpbiBkb2VzIG5vdCBtYXRjaCBjb25uZWN0aW9uIG9yaWdpbjogJHt0aGlzLl9lbmRwb2ludC5vcmlnaW59YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25lcnJvcj8uKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdm9pZCB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9ldmVudFNvdXJjZS5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlRXZlbnQgPSBldmVudDtcbiAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gSlNPTlJQQ01lc3NhZ2VTY2hlbWEucGFyc2UoSlNPTi5wYXJzZShtZXNzYWdlRXZlbnQuZGF0YSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmVycm9yPy4oZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMub25tZXNzYWdlPy4obWVzc2FnZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgc3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9ldmVudFNvdXJjZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTU0VDbGllbnRUcmFuc3BvcnQgYWxyZWFkeSBzdGFydGVkISBJZiB1c2luZyBDbGllbnQgY2xhc3MsIG5vdGUgdGhhdCBjb25uZWN0KCkgY2FsbHMgc3RhcnQoKSBhdXRvbWF0aWNhbGx5LicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9zdGFydE9yQXV0aCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsIHRoaXMgbWV0aG9kIGFmdGVyIHRoZSB1c2VyIGhhcyBmaW5pc2hlZCBhdXRob3JpemluZyB2aWEgdGhlaXIgdXNlciBhZ2VudCBhbmQgaXMgcmVkaXJlY3RlZCBiYWNrIHRvIHRoZSBNQ1AgY2xpZW50IGFwcGxpY2F0aW9uLiBUaGlzIHdpbGwgZXhjaGFuZ2UgdGhlIGF1dGhvcml6YXRpb24gY29kZSBmb3IgYW4gYWNjZXNzIHRva2VuLCBlbmFibGluZyB0aGUgbmV4dCBjb25uZWN0aW9uIGF0dGVtcHQgdG8gc3VjY2Vzc2Z1bGx5IGF1dGguXG4gICAgICovXG4gICAgYXN5bmMgZmluaXNoQXV0aChhdXRob3JpemF0aW9uQ29kZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2F1dGhQcm92aWRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFVuYXV0aG9yaXplZEVycm9yKCdObyBhdXRoIHByb3ZpZGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXV0aCh0aGlzLl9hdXRoUHJvdmlkZXIsIHtcbiAgICAgICAgICAgIHNlcnZlclVybDogdGhpcy5fdXJsLFxuICAgICAgICAgICAgYXV0aG9yaXphdGlvbkNvZGUsXG4gICAgICAgICAgICByZXNvdXJjZU1ldGFkYXRhVXJsOiB0aGlzLl9yZXNvdXJjZU1ldGFkYXRhVXJsLFxuICAgICAgICAgICAgc2NvcGU6IHRoaXMuX3Njb3BlLFxuICAgICAgICAgICAgZmV0Y2hGbjogdGhpcy5fZmV0Y2hXaXRoSW5pdFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gJ0FVVEhPUklaRUQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVW5hdXRob3JpemVkRXJyb3IoJ0ZhaWxlZCB0byBhdXRob3JpemUnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgICB0aGlzLl9ldmVudFNvdXJjZT8uY2xvc2UoKTtcbiAgICAgICAgdGhpcy5vbmNsb3NlPy4oKTtcbiAgICB9XG4gICAgYXN5bmMgc2VuZChtZXNzYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy5fZW5kcG9pbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGNvbm5lY3RlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gYXdhaXQgdGhpcy5fY29tbW9uSGVhZGVycygpO1xuICAgICAgICAgICAgaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgICAgICBjb25zdCBpbml0ID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX3JlcXVlc3RJbml0LFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksXG4gICAgICAgICAgICAgICAgc2lnbmFsOiB0aGlzLl9hYm9ydENvbnRyb2xsZXI/LnNpZ25hbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgKHRoaXMuX2ZldGNoID8/IGZldGNoKSh0aGlzLl9lbmRwb2ludCwgaW5pdCk7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgdGhpcy5fYXV0aFByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVzb3VyY2VNZXRhZGF0YVVybCwgc2NvcGUgfSA9IGV4dHJhY3RXV1dBdXRoZW50aWNhdGVQYXJhbXMocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZU1ldGFkYXRhVXJsID0gcmVzb3VyY2VNZXRhZGF0YVVybDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NvcGUgPSBzY29wZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXV0aCh0aGlzLl9hdXRoUHJvdmlkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclVybDogdGhpcy5fdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VNZXRhZGF0YVVybDogdGhpcy5fcmVzb3VyY2VNZXRhZGF0YVVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlOiB0aGlzLl9zY29wZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoRm46IHRoaXMuX2ZldGNoV2l0aEluaXRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09ICdBVVRIT1JJWkVEJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuYXV0aG9yaXplZEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUHVycG9zZWx5IF9ub3RfIGF3YWl0ZWQsIHNvIHdlIGRvbid0IGNhbGwgb25lcnJvciB0d2ljZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZW5kKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIFBPU1RpbmcgdG8gZW5kcG9pbnQgKEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9KTogJHt0ZXh0fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVsZWFzZSBjb25uZWN0aW9uIC0gUE9TVCByZXNwb25zZXMgZG9uJ3QgaGF2ZSBjb250ZW50IHdlIG5lZWRcbiAgICAgICAgICAgIGF3YWl0IHJlc3BvbnNlLmJvZHk/LmNhbmNlbCgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5vbmVycm9yPy4oZXJyb3IpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0UHJvdG9jb2xWZXJzaW9uKHZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5fcHJvdG9jb2xWZXJzaW9uID0gdmVyc2lvbjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zc2UuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/client/sse.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js":
/*!*****************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js ***!
\*****************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DEFAULT_INHERITED_ENV_VARS: () => (/* binding */ DEFAULT_INHERITED_ENV_VARS),\n/* harmony export */ StdioClientTransport: () => (/* binding */ StdioClientTransport),\n/* harmony export */ getDefaultEnvironment: () => (/* binding */ getDefaultEnvironment)\n/* harmony export */ });\n/* harmony import */ var cross_spawn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! cross-spawn */ \"(rsc)/./node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/index.js\");\n/* harmony import */ var node_process__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:process */ \"node:process\");\n/* harmony import */ var node_stream__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node:stream */ \"node:stream\");\n/* harmony import */ var _shared_stdio_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/stdio.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js\");\n\n\n\n\n/**\n * Environment variables to inherit by default, if an environment is not explicitly given.\n */\nconst DEFAULT_INHERITED_ENV_VARS = node_process__WEBPACK_IMPORTED_MODULE_1__.platform === 'win32'\n ? [\n 'APPDATA',\n 'HOMEDRIVE',\n 'HOMEPATH',\n 'LOCALAPPDATA',\n 'PATH',\n 'PROCESSOR_ARCHITECTURE',\n 'SYSTEMDRIVE',\n 'SYSTEMROOT',\n 'TEMP',\n 'USERNAME',\n 'USERPROFILE',\n 'PROGRAMFILES'\n ]\n : /* list inspired by the default env inheritance of sudo */\n ['HOME', 'LOGNAME', 'PATH', 'SHELL', 'TERM', 'USER'];\n/**\n * Returns a default environment object including only environment variables deemed safe to inherit.\n */\nfunction getDefaultEnvironment() {\n const env = {};\n for (const key of DEFAULT_INHERITED_ENV_VARS) {\n const value = node_process__WEBPACK_IMPORTED_MODULE_1__.env[key];\n if (value === undefined) {\n continue;\n }\n if (value.startsWith('()')) {\n // Skip functions, which are a security risk.\n continue;\n }\n env[key] = value;\n }\n return env;\n}\n/**\n * Client transport for stdio: this will connect to a server by spawning a process and communicating with it over stdin/stdout.\n *\n * This transport is only available in Node.js environments.\n */\nclass StdioClientTransport {\n constructor(server) {\n this._readBuffer = new _shared_stdio_js__WEBPACK_IMPORTED_MODULE_3__.ReadBuffer();\n this._stderrStream = null;\n this._serverParams = server;\n if (server.stderr === 'pipe' || server.stderr === 'overlapped') {\n this._stderrStream = new node_stream__WEBPACK_IMPORTED_MODULE_2__.PassThrough();\n }\n }\n /**\n * Starts the server process and prepares to communicate with it.\n */\n async start() {\n if (this._process) {\n throw new Error('StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.');\n }\n return new Promise((resolve, reject) => {\n this._process = cross_spawn__WEBPACK_IMPORTED_MODULE_0__(this._serverParams.command, this._serverParams.args ?? [], {\n // merge default env with server env because mcp server needs some env vars\n env: {\n ...getDefaultEnvironment(),\n ...this._serverParams.env\n },\n stdio: ['pipe', 'pipe', this._serverParams.stderr ?? 'inherit'],\n shell: false,\n windowsHide: node_process__WEBPACK_IMPORTED_MODULE_1__.platform === 'win32',\n cwd: this._serverParams.cwd\n });\n this._process.on('error', error => {\n reject(error);\n this.onerror?.(error);\n });\n this._process.on('spawn', () => {\n resolve();\n });\n this._process.on('close', _code => {\n this._process = undefined;\n this.onclose?.();\n });\n this._process.stdin?.on('error', error => {\n this.onerror?.(error);\n });\n this._process.stdout?.on('data', chunk => {\n this._readBuffer.append(chunk);\n this.processReadBuffer();\n });\n this._process.stdout?.on('error', error => {\n this.onerror?.(error);\n });\n if (this._stderrStream && this._process.stderr) {\n this._process.stderr.pipe(this._stderrStream);\n }\n });\n }\n /**\n * The stderr stream of the child process, if `StdioServerParameters.stderr` was set to \"pipe\" or \"overlapped\".\n *\n * If stderr piping was requested, a PassThrough stream is returned _immediately_, allowing callers to\n * attach listeners before the start method is invoked. This prevents loss of any early\n * error output emitted by the child process.\n */\n get stderr() {\n if (this._stderrStream) {\n return this._stderrStream;\n }\n return this._process?.stderr ?? null;\n }\n /**\n * The child process pid spawned by this transport.\n *\n * This is only available after the transport has been started.\n */\n get pid() {\n return this._process?.pid ?? null;\n }\n processReadBuffer() {\n while (true) {\n try {\n const message = this._readBuffer.readMessage();\n if (message === null) {\n break;\n }\n this.onmessage?.(message);\n }\n catch (error) {\n this.onerror?.(error);\n }\n }\n }\n async close() {\n if (this._process) {\n const processToClose = this._process;\n this._process = undefined;\n const closePromise = new Promise(resolve => {\n processToClose.once('close', () => {\n resolve();\n });\n });\n try {\n processToClose.stdin?.end();\n }\n catch {\n // ignore\n }\n await Promise.race([closePromise, new Promise(resolve => setTimeout(resolve, 2000).unref())]);\n if (processToClose.exitCode === null) {\n try {\n processToClose.kill('SIGTERM');\n }\n catch {\n // ignore\n }\n await Promise.race([closePromise, new Promise(resolve => setTimeout(resolve, 2000).unref())]);\n }\n if (processToClose.exitCode === null) {\n try {\n processToClose.kill('SIGKILL');\n }\n catch {\n // ignore\n }\n }\n }\n this._readBuffer.clear();\n }\n send(message) {\n return new Promise(resolve => {\n if (!this._process?.stdin) {\n throw new Error('Not connected');\n }\n const json = (0,_shared_stdio_js__WEBPACK_IMPORTED_MODULE_3__.serializeMessage)(message);\n if (this._process.stdin.write(json)) {\n resolve();\n }\n else {\n this._process.stdin.once('drain', resolve);\n }\n });\n }\n}\n//# sourceMappingURL=stdio.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vY2xpZW50L3N0ZGlvLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBZ0M7QUFDRztBQUNPO0FBQ3dCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNPLG1DQUFtQyxrREFBZ0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxzQkFBc0IsNkNBQVc7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0EsK0JBQStCLHdEQUFVO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxvREFBVztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix3Q0FBSztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsNkJBQTZCLGtEQUFnQjtBQUM3QztBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsa0VBQWdCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vY2xpZW50L3N0ZGlvLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzcGF3biBmcm9tICdjcm9zcy1zcGF3bic7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgUGFzc1Rocm91Z2ggfSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgeyBSZWFkQnVmZmVyLCBzZXJpYWxpemVNZXNzYWdlIH0gZnJvbSAnLi4vc2hhcmVkL3N0ZGlvLmpzJztcbi8qKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGluaGVyaXQgYnkgZGVmYXVsdCwgaWYgYW4gZW52aXJvbm1lbnQgaXMgbm90IGV4cGxpY2l0bHkgZ2l2ZW4uXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOSEVSSVRFRF9FTlZfVkFSUyA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMidcbiAgICA/IFtcbiAgICAgICAgJ0FQUERBVEEnLFxuICAgICAgICAnSE9NRURSSVZFJyxcbiAgICAgICAgJ0hPTUVQQVRIJyxcbiAgICAgICAgJ0xPQ0FMQVBQREFUQScsXG4gICAgICAgICdQQVRIJyxcbiAgICAgICAgJ1BST0NFU1NPUl9BUkNISVRFQ1RVUkUnLFxuICAgICAgICAnU1lTVEVNRFJJVkUnLFxuICAgICAgICAnU1lTVEVNUk9PVCcsXG4gICAgICAgICdURU1QJyxcbiAgICAgICAgJ1VTRVJOQU1FJyxcbiAgICAgICAgJ1VTRVJQUk9GSUxFJyxcbiAgICAgICAgJ1BST0dSQU1GSUxFUydcbiAgICBdXG4gICAgOiAvKiBsaXN0IGluc3BpcmVkIGJ5IHRoZSBkZWZhdWx0IGVudiBpbmhlcml0YW5jZSBvZiBzdWRvICovXG4gICAgICAgIFsnSE9NRScsICdMT0dOQU1FJywgJ1BBVEgnLCAnU0hFTEwnLCAnVEVSTScsICdVU0VSJ107XG4vKipcbiAqIFJldHVybnMgYSBkZWZhdWx0IGVudmlyb25tZW50IG9iamVjdCBpbmNsdWRpbmcgb25seSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGVlbWVkIHNhZmUgdG8gaW5oZXJpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRFbnZpcm9ubWVudCgpIHtcbiAgICBjb25zdCBlbnYgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBERUZBVUxUX0lOSEVSSVRFRF9FTlZfVkFSUykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3MuZW52W2tleV07XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnKCknKSkge1xuICAgICAgICAgICAgLy8gU2tpcCBmdW5jdGlvbnMsIHdoaWNoIGFyZSBhIHNlY3VyaXR5IHJpc2suXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBlbnZba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZW52O1xufVxuLyoqXG4gKiBDbGllbnQgdHJhbnNwb3J0IGZvciBzdGRpbzogdGhpcyB3aWxsIGNvbm5lY3QgdG8gYSBzZXJ2ZXIgYnkgc3Bhd25pbmcgYSBwcm9jZXNzIGFuZCBjb21tdW5pY2F0aW5nIHdpdGggaXQgb3ZlciBzdGRpbi9zdGRvdXQuXG4gKlxuICogVGhpcyB0cmFuc3BvcnQgaXMgb25seSBhdmFpbGFibGUgaW4gTm9kZS5qcyBlbnZpcm9ubWVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGRpb0NsaWVudFRyYW5zcG9ydCB7XG4gICAgY29uc3RydWN0b3Ioc2VydmVyKSB7XG4gICAgICAgIHRoaXMuX3JlYWRCdWZmZXIgPSBuZXcgUmVhZEJ1ZmZlcigpO1xuICAgICAgICB0aGlzLl9zdGRlcnJTdHJlYW0gPSBudWxsO1xuICAgICAgICB0aGlzLl9zZXJ2ZXJQYXJhbXMgPSBzZXJ2ZXI7XG4gICAgICAgIGlmIChzZXJ2ZXIuc3RkZXJyID09PSAncGlwZScgfHwgc2VydmVyLnN0ZGVyciA9PT0gJ292ZXJsYXBwZWQnKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGRlcnJTdHJlYW0gPSBuZXcgUGFzc1Rocm91Z2goKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydHMgdGhlIHNlcnZlciBwcm9jZXNzIGFuZCBwcmVwYXJlcyB0byBjb21tdW5pY2F0ZSB3aXRoIGl0LlxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0KCkge1xuICAgICAgICBpZiAodGhpcy5fcHJvY2Vzcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGRpb0NsaWVudFRyYW5zcG9ydCBhbHJlYWR5IHN0YXJ0ZWQhIElmIHVzaW5nIENsaWVudCBjbGFzcywgbm90ZSB0aGF0IGNvbm5lY3QoKSBjYWxscyBzdGFydCgpIGF1dG9tYXRpY2FsbHkuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MgPSBzcGF3bih0aGlzLl9zZXJ2ZXJQYXJhbXMuY29tbWFuZCwgdGhpcy5fc2VydmVyUGFyYW1zLmFyZ3MgPz8gW10sIHtcbiAgICAgICAgICAgICAgICAvLyBtZXJnZSBkZWZhdWx0IGVudiB3aXRoIHNlcnZlciBlbnYgYmVjYXVzZSBtY3Agc2VydmVyIG5lZWRzIHNvbWUgZW52IHZhcnNcbiAgICAgICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZ2V0RGVmYXVsdEVudmlyb25tZW50KCksXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX3NlcnZlclBhcmFtcy5lbnZcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsIHRoaXMuX3NlcnZlclBhcmFtcy5zdGRlcnIgPz8gJ2luaGVyaXQnXSxcbiAgICAgICAgICAgICAgICBzaGVsbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgd2luZG93c0hpZGU6IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicsXG4gICAgICAgICAgICAgICAgY3dkOiB0aGlzLl9zZXJ2ZXJQYXJhbXMuY3dkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3Mub24oJ2Vycm9yJywgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmVycm9yPy4oZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzLm9uKCdzcGF3bicsICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3Mub24oJ2Nsb3NlJywgX2NvZGUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNsb3NlPy4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzcy5zdGRpbj8ub24oJ2Vycm9yJywgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25lcnJvcj8uKGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzcy5zdGRvdXQ/Lm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRCdWZmZXIuYXBwZW5kKGNodW5rKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NSZWFkQnVmZmVyKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3Muc3Rkb3V0Py5vbignZXJyb3InLCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmVycm9yPy4oZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fc3RkZXJyU3RyZWFtICYmIHRoaXMuX3Byb2Nlc3Muc3RkZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzcy5zdGRlcnIucGlwZSh0aGlzLl9zdGRlcnJTdHJlYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHN0ZGVyciBzdHJlYW0gb2YgdGhlIGNoaWxkIHByb2Nlc3MsIGlmIGBTdGRpb1NlcnZlclBhcmFtZXRlcnMuc3RkZXJyYCB3YXMgc2V0IHRvIFwicGlwZVwiIG9yIFwib3ZlcmxhcHBlZFwiLlxuICAgICAqXG4gICAgICogSWYgc3RkZXJyIHBpcGluZyB3YXMgcmVxdWVzdGVkLCBhIFBhc3NUaHJvdWdoIHN0cmVhbSBpcyByZXR1cm5lZCBfaW1tZWRpYXRlbHlfLCBhbGxvd2luZyBjYWxsZXJzIHRvXG4gICAgICogYXR0YWNoIGxpc3RlbmVycyBiZWZvcmUgdGhlIHN0YXJ0IG1ldGhvZCBpcyBpbnZva2VkLiBUaGlzIHByZXZlbnRzIGxvc3Mgb2YgYW55IGVhcmx5XG4gICAgICogZXJyb3Igb3V0cHV0IGVtaXR0ZWQgYnkgdGhlIGNoaWxkIHByb2Nlc3MuXG4gICAgICovXG4gICAgZ2V0IHN0ZGVycigpIHtcbiAgICAgICAgaWYgKHRoaXMuX3N0ZGVyclN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZGVyclN0cmVhbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzcz8uc3RkZXJyID8/IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjaGlsZCBwcm9jZXNzIHBpZCBzcGF3bmVkIGJ5IHRoaXMgdHJhbnNwb3J0LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBhZnRlciB0aGUgdHJhbnNwb3J0IGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICovXG4gICAgZ2V0IHBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3M/LnBpZCA/PyBudWxsO1xuICAgIH1cbiAgICBwcm9jZXNzUmVhZEJ1ZmZlcigpIHtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuX3JlYWRCdWZmZXIucmVhZE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vbm1lc3NhZ2U/LihtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMub25lcnJvcj8uKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3Byb2Nlc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NUb0Nsb3NlID0gdGhpcy5fcHJvY2VzcztcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBjbG9zZVByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzVG9DbG9zZS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NUb0Nsb3NlLnN0ZGluPy5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UucmFjZShbY2xvc2VQcm9taXNlLCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwMCkudW5yZWYoKSldKTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzVG9DbG9zZS5leGl0Q29kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NUb0Nsb3NlLmtpbGwoJ1NJR1RFUk0nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtjbG9zZVByb21pc2UsIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyMDAwKS51bnJlZigpKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NUb0Nsb3NlLmV4aXRDb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1RvQ2xvc2Uua2lsbCgnU0lHS0lMTCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWFkQnVmZmVyLmNsZWFyKCk7XG4gICAgfVxuICAgIHNlbmQobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3Byb2Nlc3M/LnN0ZGluKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgY29ubmVjdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBqc29uID0gc2VyaWFsaXplTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9jZXNzLnN0ZGluLndyaXRlKGpzb24pKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzcy5zdGRpbi5vbmNlKCdkcmFpbicsIHJlc29sdmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGRpby5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/client.js":
/*!******************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/client.js ***!
\******************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ExperimentalClientTasks: () => (/* binding */ ExperimentalClientTasks)\n/* harmony export */ });\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../types.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js\");\n/**\n * Experimental client task features for MCP SDK.\n * WARNING: These APIs are experimental and may change without notice.\n *\n * @experimental\n */\n\n/**\n * Experimental task features for MCP clients.\n *\n * Access via `client.experimental.tasks`:\n * ```typescript\n * const stream = client.experimental.tasks.callToolStream({ name: 'tool', arguments: {} });\n * const task = await client.experimental.tasks.getTask(taskId);\n * ```\n *\n * @experimental\n */\nclass ExperimentalClientTasks {\n constructor(_client) {\n this._client = _client;\n }\n /**\n * Calls a tool and returns an AsyncGenerator that yields response messages.\n * The generator is guaranteed to end with either a 'result' or 'error' message.\n *\n * This method provides streaming access to tool execution, allowing you to\n * observe intermediate task status updates for long-running tool calls.\n * Automatically validates structured output if the tool has an outputSchema.\n *\n * @example\n * ```typescript\n * const stream = client.experimental.tasks.callToolStream({ name: 'myTool', arguments: {} });\n * for await (const message of stream) {\n * switch (message.type) {\n * case 'taskCreated':\n * console.log('Tool execution started:', message.task.taskId);\n * break;\n * case 'taskStatus':\n * console.log('Tool status:', message.task.status);\n * break;\n * case 'result':\n * console.log('Tool result:', message.result);\n * break;\n * case 'error':\n * console.error('Tool error:', message.error);\n * break;\n * }\n * }\n * ```\n *\n * @param params - Tool call parameters (name and arguments)\n * @param resultSchema - Zod schema for validating the result (defaults to CallToolResultSchema)\n * @param options - Optional request options (timeout, signal, task creation params, etc.)\n * @returns AsyncGenerator that yields ResponseMessage objects\n *\n * @experimental\n */\n async *callToolStream(params, resultSchema = _types_js__WEBPACK_IMPORTED_MODULE_0__.CallToolResultSchema, options) {\n // Access Client's internal methods\n const clientInternal = this._client;\n // Add task creation parameters if server supports it and not explicitly provided\n const optionsWithTask = {\n ...options,\n // We check if the tool is known to be a task during auto-configuration, but assume\n // the caller knows what they're doing if they pass this explicitly\n task: options?.task ?? (clientInternal.isToolTask(params.name) ? {} : undefined)\n };\n const stream = clientInternal.requestStream({ method: 'tools/call', params }, resultSchema, optionsWithTask);\n // Get the validator for this tool (if it has an output schema)\n const validator = clientInternal.getToolOutputValidator(params.name);\n // Iterate through the stream and validate the final result if needed\n for await (const message of stream) {\n // If this is a result message and the tool has an output schema, validate it\n if (message.type === 'result' && validator) {\n const result = message.result;\n // If tool has outputSchema, it MUST return structuredContent (unless it's an error)\n if (!result.structuredContent && !result.isError) {\n yield {\n type: 'error',\n error: new _types_js__WEBPACK_IMPORTED_MODULE_0__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_0__.ErrorCode.InvalidRequest, `Tool ${params.name} has an output schema but did not return structured content`)\n };\n return;\n }\n // Only validate structured content if present (not when there's an error)\n if (result.structuredContent) {\n try {\n // Validate the structured content against the schema\n const validationResult = validator(result.structuredContent);\n if (!validationResult.valid) {\n yield {\n type: 'error',\n error: new _types_js__WEBPACK_IMPORTED_MODULE_0__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_0__.ErrorCode.InvalidParams, `Structured content does not match the tool's output schema: ${validationResult.errorMessage}`)\n };\n return;\n }\n }\n catch (error) {\n if (error instanceof _types_js__WEBPACK_IMPORTED_MODULE_0__.McpError) {\n yield { type: 'error', error };\n return;\n }\n yield {\n type: 'error',\n error: new _types_js__WEBPACK_IMPORTED_MODULE_0__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_0__.ErrorCode.InvalidParams, `Failed to validate structured content: ${error instanceof Error ? error.message : String(error)}`)\n };\n return;\n }\n }\n }\n // Yield the message (either validated result or any other message type)\n yield message;\n }\n }\n /**\n * Gets the current status of a task.\n *\n * @param taskId - The task identifier\n * @param options - Optional request options\n * @returns The task status\n *\n * @experimental\n */\n async getTask(taskId, options) {\n return this._client.getTask({ taskId }, options);\n }\n /**\n * Retrieves the result of a completed task.\n *\n * @param taskId - The task identifier\n * @param resultSchema - Zod schema for validating the result\n * @param options - Optional request options\n * @returns The task result\n *\n * @experimental\n */\n async getTaskResult(taskId, resultSchema, options) {\n // Delegate to the client's underlying Protocol method\n return this._client.getTaskResult({ taskId }, resultSchema, options);\n }\n /**\n * Lists tasks with optional pagination.\n *\n * @param cursor - Optional pagination cursor\n * @param options - Optional request options\n * @returns List of tasks with optional next cursor\n *\n * @experimental\n */\n async listTasks(cursor, options) {\n // Delegate to the client's underlying Protocol method\n return this._client.listTasks(cursor ? { cursor } : undefined, options);\n }\n /**\n * Cancels a running task.\n *\n * @param taskId - The task identifier\n * @param options - Optional request options\n *\n * @experimental\n */\n async cancelTask(taskId, options) {\n // Delegate to the client's underlying Protocol method\n return this._client.cancelTask({ taskId }, options);\n }\n /**\n * Sends a request and returns an AsyncGenerator that yields response messages.\n * The generator is guaranteed to end with either a 'result' or 'error' message.\n *\n * This method provides streaming access to request processing, allowing you to\n * observe intermediate task status updates for task-augmented requests.\n *\n * @param request - The request to send\n * @param resultSchema - Zod schema for validating the result\n * @param options - Optional request options (timeout, signal, task creation params, etc.)\n * @returns AsyncGenerator that yields ResponseMessage objects\n *\n * @experimental\n */\n requestStream(request, resultSchema, options) {\n return this._client.requestStream(request, resultSchema, options);\n }\n}\n//# sourceMappingURL=client.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vZXhwZXJpbWVudGFsL3Rhc2tzL2NsaWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUMyRTtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELDZCQUE2QjtBQUMxRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRSwrQkFBK0I7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsMkRBQW9CO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0ZBQWdGO0FBQ2hGO0FBQ0Esc0RBQXNELDhCQUE4QjtBQUNwRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLCtDQUFRLENBQUMsZ0RBQVMseUJBQXlCLGFBQWE7QUFDM0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQywrQ0FBUSxDQUFDLGdEQUFTLCtFQUErRSw4QkFBOEI7QUFDMUs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QywrQ0FBUTtBQUNyRCxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsK0NBQVEsQ0FBQyxnREFBUywwREFBMEQsdURBQXVEO0FBQzFLO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLFFBQVE7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsU0FBUztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLFFBQVE7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9kZWxjb250ZXh0cHJvdG9jb2wrc2RrQDEuMjkuMF96b2RAMy4yNS43Ni9ub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9kaXN0L2VzbS9leHBlcmltZW50YWwvdGFza3MvY2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXhwZXJpbWVudGFsIGNsaWVudCB0YXNrIGZlYXR1cmVzIGZvciBNQ1AgU0RLLlxuICogV0FSTklORzogVGhlc2UgQVBJcyBhcmUgZXhwZXJpbWVudGFsIGFuZCBtYXkgY2hhbmdlIHdpdGhvdXQgbm90aWNlLlxuICpcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuaW1wb3J0IHsgQ2FsbFRvb2xSZXN1bHRTY2hlbWEsIE1jcEVycm9yLCBFcnJvckNvZGUgfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG4vKipcbiAqIEV4cGVyaW1lbnRhbCB0YXNrIGZlYXR1cmVzIGZvciBNQ1AgY2xpZW50cy5cbiAqXG4gKiBBY2Nlc3MgdmlhIGBjbGllbnQuZXhwZXJpbWVudGFsLnRhc2tzYDpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHN0cmVhbSA9IGNsaWVudC5leHBlcmltZW50YWwudGFza3MuY2FsbFRvb2xTdHJlYW0oeyBuYW1lOiAndG9vbCcsIGFyZ3VtZW50czoge30gfSk7XG4gKiBjb25zdCB0YXNrID0gYXdhaXQgY2xpZW50LmV4cGVyaW1lbnRhbC50YXNrcy5nZXRUYXNrKHRhc2tJZCk7XG4gKiBgYGBcbiAqXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjbGFzcyBFeHBlcmltZW50YWxDbGllbnRUYXNrcyB7XG4gICAgY29uc3RydWN0b3IoX2NsaWVudCkge1xuICAgICAgICB0aGlzLl9jbGllbnQgPSBfY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxscyBhIHRvb2wgYW5kIHJldHVybnMgYW4gQXN5bmNHZW5lcmF0b3IgdGhhdCB5aWVsZHMgcmVzcG9uc2UgbWVzc2FnZXMuXG4gICAgICogVGhlIGdlbmVyYXRvciBpcyBndWFyYW50ZWVkIHRvIGVuZCB3aXRoIGVpdGhlciBhICdyZXN1bHQnIG9yICdlcnJvcicgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIHN0cmVhbWluZyBhY2Nlc3MgdG8gdG9vbCBleGVjdXRpb24sIGFsbG93aW5nIHlvdSB0b1xuICAgICAqIG9ic2VydmUgaW50ZXJtZWRpYXRlIHRhc2sgc3RhdHVzIHVwZGF0ZXMgZm9yIGxvbmctcnVubmluZyB0b29sIGNhbGxzLlxuICAgICAqIEF1dG9tYXRpY2FsbHkgdmFsaWRhdGVzIHN0cnVjdHVyZWQgb3V0cHV0IGlmIHRoZSB0b29sIGhhcyBhbiBvdXRwdXRTY2hlbWEuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBzdHJlYW0gPSBjbGllbnQuZXhwZXJpbWVudGFsLnRhc2tzLmNhbGxUb29sU3RyZWFtKHsgbmFtZTogJ215VG9vbCcsIGFyZ3VtZW50czoge30gfSk7XG4gICAgICogZm9yIGF3YWl0IChjb25zdCBtZXNzYWdlIG9mIHN0cmVhbSkge1xuICAgICAqICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgKiAgICAgY2FzZSAndGFza0NyZWF0ZWQnOlxuICAgICAqICAgICAgIGNvbnNvbGUubG9nKCdUb29sIGV4ZWN1dGlvbiBzdGFydGVkOicsIG1lc3NhZ2UudGFzay50YXNrSWQpO1xuICAgICAqICAgICAgIGJyZWFrO1xuICAgICAqICAgICBjYXNlICd0YXNrU3RhdHVzJzpcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZygnVG9vbCBzdGF0dXM6JywgbWVzc2FnZS50YXNrLnN0YXR1cyk7XG4gICAgICogICAgICAgYnJlYWs7XG4gICAgICogICAgIGNhc2UgJ3Jlc3VsdCc6XG4gICAgICogICAgICAgY29uc29sZS5sb2coJ1Rvb2wgcmVzdWx0OicsIG1lc3NhZ2UucmVzdWx0KTtcbiAgICAgKiAgICAgICBicmVhaztcbiAgICAgKiAgICAgY2FzZSAnZXJyb3InOlxuICAgICAqICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Rvb2wgZXJyb3I6JywgbWVzc2FnZS5lcnJvcik7XG4gICAgICogICAgICAgYnJlYWs7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtcyAtIFRvb2wgY2FsbCBwYXJhbWV0ZXJzIChuYW1lIGFuZCBhcmd1bWVudHMpXG4gICAgICogQHBhcmFtIHJlc3VsdFNjaGVtYSAtIFpvZCBzY2hlbWEgZm9yIHZhbGlkYXRpbmcgdGhlIHJlc3VsdCAoZGVmYXVsdHMgdG8gQ2FsbFRvb2xSZXN1bHRTY2hlbWEpXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCByZXF1ZXN0IG9wdGlvbnMgKHRpbWVvdXQsIHNpZ25hbCwgdGFzayBjcmVhdGlvbiBwYXJhbXMsIGV0Yy4pXG4gICAgICogQHJldHVybnMgQXN5bmNHZW5lcmF0b3IgdGhhdCB5aWVsZHMgUmVzcG9uc2VNZXNzYWdlIG9iamVjdHNcbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgKi9cbiAgICBhc3luYyAqY2FsbFRvb2xTdHJlYW0ocGFyYW1zLCByZXN1bHRTY2hlbWEgPSBDYWxsVG9vbFJlc3VsdFNjaGVtYSwgb3B0aW9ucykge1xuICAgICAgICAvLyBBY2Nlc3MgQ2xpZW50J3MgaW50ZXJuYWwgbWV0aG9kc1xuICAgICAgICBjb25zdCBjbGllbnRJbnRlcm5hbCA9IHRoaXMuX2NsaWVudDtcbiAgICAgICAgLy8gQWRkIHRhc2sgY3JlYXRpb24gcGFyYW1ldGVycyBpZiBzZXJ2ZXIgc3VwcG9ydHMgaXQgYW5kIG5vdCBleHBsaWNpdGx5IHByb3ZpZGVkXG4gICAgICAgIGNvbnN0IG9wdGlvbnNXaXRoVGFzayA9IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAvLyBXZSBjaGVjayBpZiB0aGUgdG9vbCBpcyBrbm93biB0byBiZSBhIHRhc2sgZHVyaW5nIGF1dG8tY29uZmlndXJhdGlvbiwgYnV0IGFzc3VtZVxuICAgICAgICAgICAgLy8gdGhlIGNhbGxlciBrbm93cyB3aGF0IHRoZXkncmUgZG9pbmcgaWYgdGhleSBwYXNzIHRoaXMgZXhwbGljaXRseVxuICAgICAgICAgICAgdGFzazogb3B0aW9ucz8udGFzayA/PyAoY2xpZW50SW50ZXJuYWwuaXNUb29sVGFzayhwYXJhbXMubmFtZSkgPyB7fSA6IHVuZGVmaW5lZClcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gY2xpZW50SW50ZXJuYWwucmVxdWVzdFN0cmVhbSh7IG1ldGhvZDogJ3Rvb2xzL2NhbGwnLCBwYXJhbXMgfSwgcmVzdWx0U2NoZW1hLCBvcHRpb25zV2l0aFRhc2spO1xuICAgICAgICAvLyBHZXQgdGhlIHZhbGlkYXRvciBmb3IgdGhpcyB0b29sIChpZiBpdCBoYXMgYW4gb3V0cHV0IHNjaGVtYSlcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gY2xpZW50SW50ZXJuYWwuZ2V0VG9vbE91dHB1dFZhbGlkYXRvcihwYXJhbXMubmFtZSk7XG4gICAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc3RyZWFtIGFuZCB2YWxpZGF0ZSB0aGUgZmluYWwgcmVzdWx0IGlmIG5lZWRlZFxuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IG1lc3NhZ2Ugb2Ygc3RyZWFtKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcmVzdWx0IG1lc3NhZ2UgYW5kIHRoZSB0b29sIGhhcyBhbiBvdXRwdXQgc2NoZW1hLCB2YWxpZGF0ZSBpdFxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ3Jlc3VsdCcgJiYgdmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbWVzc2FnZS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgLy8gSWYgdG9vbCBoYXMgb3V0cHV0U2NoZW1hLCBpdCBNVVNUIHJldHVybiBzdHJ1Y3R1cmVkQ29udGVudCAodW5sZXNzIGl0J3MgYW4gZXJyb3IpXG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3RydWN0dXJlZENvbnRlbnQgJiYgIXJlc3VsdC5pc0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogbmV3IE1jcEVycm9yKEVycm9yQ29kZS5JbnZhbGlkUmVxdWVzdCwgYFRvb2wgJHtwYXJhbXMubmFtZX0gaGFzIGFuIG91dHB1dCBzY2hlbWEgYnV0IGRpZCBub3QgcmV0dXJuIHN0cnVjdHVyZWQgY29udGVudGApXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gT25seSB2YWxpZGF0ZSBzdHJ1Y3R1cmVkIGNvbnRlbnQgaWYgcHJlc2VudCAobm90IHdoZW4gdGhlcmUncyBhbiBlcnJvcilcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0cnVjdHVyZWRDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSB0aGUgc3RydWN0dXJlZCBjb250ZW50IGFnYWluc3QgdGhlIHNjaGVtYVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRvcihyZXN1bHQuc3RydWN0dXJlZENvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogbmV3IE1jcEVycm9yKEVycm9yQ29kZS5JbnZhbGlkUGFyYW1zLCBgU3RydWN0dXJlZCBjb250ZW50IGRvZXMgbm90IG1hdGNoIHRoZSB0b29sJ3Mgb3V0cHV0IHNjaGVtYTogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yTWVzc2FnZX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTWNwRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB7IHR5cGU6ICdlcnJvcicsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBNY3BFcnJvcihFcnJvckNvZGUuSW52YWxpZFBhcmFtcywgYEZhaWxlZCB0byB2YWxpZGF0ZSBzdHJ1Y3R1cmVkIGNvbnRlbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gWWllbGQgdGhlIG1lc3NhZ2UgKGVpdGhlciB2YWxpZGF0ZWQgcmVzdWx0IG9yIGFueSBvdGhlciBtZXNzYWdlIHR5cGUpXG4gICAgICAgICAgICB5aWVsZCBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIGEgdGFzay5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YXNrSWQgLSBUaGUgdGFzayBpZGVudGlmaWVyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCByZXF1ZXN0IG9wdGlvbnNcbiAgICAgKiBAcmV0dXJucyBUaGUgdGFzayBzdGF0dXNcbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgKi9cbiAgICBhc3luYyBnZXRUYXNrKHRhc2tJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldFRhc2soeyB0YXNrSWQgfSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgcmVzdWx0IG9mIGEgY29tcGxldGVkIHRhc2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFza0lkIC0gVGhlIHRhc2sgaWRlbnRpZmllclxuICAgICAqIEBwYXJhbSByZXN1bHRTY2hlbWEgLSBab2Qgc2NoZW1hIGZvciB2YWxpZGF0aW5nIHRoZSByZXN1bHRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHJlcXVlc3Qgb3B0aW9uc1xuICAgICAqIEByZXR1cm5zIFRoZSB0YXNrIHJlc3VsdFxuICAgICAqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqL1xuICAgIGFzeW5jIGdldFRhc2tSZXN1bHQodGFza0lkLCByZXN1bHRTY2hlbWEsIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gRGVsZWdhdGUgdG8gdGhlIGNsaWVudCdzIHVuZGVybHlpbmcgUHJvdG9jb2wgbWV0aG9kXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0VGFza1Jlc3VsdCh7IHRhc2tJZCB9LCByZXN1bHRTY2hlbWEsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMaXN0cyB0YXNrcyB3aXRoIG9wdGlvbmFsIHBhZ2luYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY3Vyc29yIC0gT3B0aW9uYWwgcGFnaW5hdGlvbiBjdXJzb3JcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHJlcXVlc3Qgb3B0aW9uc1xuICAgICAqIEByZXR1cm5zIExpc3Qgb2YgdGFza3Mgd2l0aCBvcHRpb25hbCBuZXh0IGN1cnNvclxuICAgICAqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqL1xuICAgIGFzeW5jIGxpc3RUYXNrcyhjdXJzb3IsIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gRGVsZWdhdGUgdG8gdGhlIGNsaWVudCdzIHVuZGVybHlpbmcgUHJvdG9jb2wgbWV0aG9kXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnQubGlzdFRhc2tzKGN1cnNvciA/IHsgY3Vyc29yIH0gOiB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYW5jZWxzIGEgcnVubmluZyB0YXNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhc2tJZCAtIFRoZSB0YXNrIGlkZW50aWZpZXJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHJlcXVlc3Qgb3B0aW9uc1xuICAgICAqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqL1xuICAgIGFzeW5jIGNhbmNlbFRhc2sodGFza0lkLCBvcHRpb25zKSB7XG4gICAgICAgIC8vIERlbGVnYXRlIHRvIHRoZSBjbGllbnQncyB1bmRlcmx5aW5nIFByb3RvY29sIG1ldGhvZFxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LmNhbmNlbFRhc2soeyB0YXNrSWQgfSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmRzIGEgcmVxdWVzdCBhbmQgcmV0dXJucyBhbiBBc3luY0dlbmVyYXRvciB0aGF0IHlpZWxkcyByZXNwb25zZSBtZXNzYWdlcy5cbiAgICAgKiBUaGUgZ2VuZXJhdG9yIGlzIGd1YXJhbnRlZWQgdG8gZW5kIHdpdGggZWl0aGVyIGEgJ3Jlc3VsdCcgb3IgJ2Vycm9yJyBtZXNzYWdlLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgc3RyZWFtaW5nIGFjY2VzcyB0byByZXF1ZXN0IHByb2Nlc3NpbmcsIGFsbG93aW5nIHlvdSB0b1xuICAgICAqIG9ic2VydmUgaW50ZXJtZWRpYXRlIHRhc2sgc3RhdHVzIHVwZGF0ZXMgZm9yIHRhc2stYXVnbWVudGVkIHJlcXVlc3RzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgLSBUaGUgcmVxdWVzdCB0byBzZW5kXG4gICAgICogQHBhcmFtIHJlc3VsdFNjaGVtYSAtIFpvZCBzY2hlbWEgZm9yIHZhbGlkYXRpbmcgdGhlIHJlc3VsdFxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcmVxdWVzdCBvcHRpb25zICh0aW1lb3V0LCBzaWduYWwsIHRhc2sgY3JlYXRpb24gcGFyYW1zLCBldGMuKVxuICAgICAqIEByZXR1cm5zIEFzeW5jR2VuZXJhdG9yIHRoYXQgeWllbGRzIFJlc3BvbnNlTWVzc2FnZSBvYmplY3RzXG4gICAgICpcbiAgICAgKiBAZXhwZXJpbWVudGFsXG4gICAgICovXG4gICAgcmVxdWVzdFN0cmVhbShyZXF1ZXN0LCByZXN1bHRTY2hlbWEsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5yZXF1ZXN0U3RyZWFtKHJlcXVlc3QsIHJlc3VsdFNjaGVtYSwgb3B0aW9ucyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2xpZW50LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/client.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js":
/*!*******************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js ***!
\*******************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ assertClientRequestTaskCapability: () => (/* binding */ assertClientRequestTaskCapability),\n/* harmony export */ assertToolsCallTaskCapability: () => (/* binding */ assertToolsCallTaskCapability)\n/* harmony export */ });\n/**\n * Experimental task capability assertion helpers.\n * WARNING: These APIs are experimental and may change without notice.\n *\n * @experimental\n */\n/**\n * Asserts that task creation is supported for tools/call.\n * Used by Client.assertTaskCapability and Server.assertTaskHandlerCapability.\n *\n * @param requests - The task requests capability object\n * @param method - The method being checked\n * @param entityName - 'Server' or 'Client' for error messages\n * @throws Error if the capability is not supported\n *\n * @experimental\n */\nfunction assertToolsCallTaskCapability(requests, method, entityName) {\n if (!requests) {\n throw new Error(`${entityName} does not support task creation (required for ${method})`);\n }\n switch (method) {\n case 'tools/call':\n if (!requests.tools?.call) {\n throw new Error(`${entityName} does not support task creation for tools/call (required for ${method})`);\n }\n break;\n default:\n // Method doesn't support tasks, which is fine - no error\n break;\n }\n}\n/**\n * Asserts that task creation is supported for sampling/createMessage or elicitation/create.\n * Used by Server.assertTaskCapability and Client.assertTaskHandlerCapability.\n *\n * @param requests - The task requests capability object\n * @param method - The method being checked\n * @param entityName - 'Server' or 'Client' for error messages\n * @throws Error if the capability is not supported\n *\n * @experimental\n */\nfunction assertClientRequestTaskCapability(requests, method, entityName) {\n if (!requests) {\n throw new Error(`${entityName} does not support task creation (required for ${method})`);\n }\n switch (method) {\n case 'sampling/createMessage':\n if (!requests.sampling?.createMessage) {\n throw new Error(`${entityName} does not support task creation for sampling/createMessage (required for ${method})`);\n }\n break;\n case 'elicitation/create':\n if (!requests.elicitation?.create) {\n throw new Error(`${entityName} does not support task creation for elicitation/create (required for ${method})`);\n }\n break;\n default:\n // Method doesn't support tasks, which is fine - no error\n break;\n }\n}\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vZXhwZXJpbWVudGFsL3Rhc2tzL2hlbHBlcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLDJCQUEyQixZQUFZLCtDQUErQyxPQUFPO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLFlBQVksOERBQThELE9BQU87QUFDcEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLDJCQUEyQixZQUFZLCtDQUErQyxPQUFPO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLFlBQVksMEVBQTBFLE9BQU87QUFDaEk7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsWUFBWSxzRUFBc0UsT0FBTztBQUM1SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0Btb2RlbGNvbnRleHRwcm90b2NvbCtzZGtAMS4yOS4wX3pvZEAzLjI1Ljc2L25vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2Rpc3QvZXNtL2V4cGVyaW1lbnRhbC90YXNrcy9oZWxwZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXhwZXJpbWVudGFsIHRhc2sgY2FwYWJpbGl0eSBhc3NlcnRpb24gaGVscGVycy5cbiAqIFdBUk5JTkc6IFRoZXNlIEFQSXMgYXJlIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbi8qKlxuICogQXNzZXJ0cyB0aGF0IHRhc2sgY3JlYXRpb24gaXMgc3VwcG9ydGVkIGZvciB0b29scy9jYWxsLlxuICogVXNlZCBieSBDbGllbnQuYXNzZXJ0VGFza0NhcGFiaWxpdHkgYW5kIFNlcnZlci5hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkuXG4gKlxuICogQHBhcmFtIHJlcXVlc3RzIC0gVGhlIHRhc2sgcmVxdWVzdHMgY2FwYWJpbGl0eSBvYmplY3RcbiAqIEBwYXJhbSBtZXRob2QgLSBUaGUgbWV0aG9kIGJlaW5nIGNoZWNrZWRcbiAqIEBwYXJhbSBlbnRpdHlOYW1lIC0gJ1NlcnZlcicgb3IgJ0NsaWVudCcgZm9yIGVycm9yIG1lc3NhZ2VzXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBjYXBhYmlsaXR5IGlzIG5vdCBzdXBwb3J0ZWRcbiAqXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRUb29sc0NhbGxUYXNrQ2FwYWJpbGl0eShyZXF1ZXN0cywgbWV0aG9kLCBlbnRpdHlOYW1lKSB7XG4gICAgaWYgKCFyZXF1ZXN0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW50aXR5TmFtZX0gZG9lcyBub3Qgc3VwcG9ydCB0YXNrIGNyZWF0aW9uIChyZXF1aXJlZCBmb3IgJHttZXRob2R9KWApO1xuICAgIH1cbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICBjYXNlICd0b29scy9jYWxsJzpcbiAgICAgICAgICAgIGlmICghcmVxdWVzdHMudG9vbHM/LmNhbGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW50aXR5TmFtZX0gZG9lcyBub3Qgc3VwcG9ydCB0YXNrIGNyZWF0aW9uIGZvciB0b29scy9jYWxsIChyZXF1aXJlZCBmb3IgJHttZXRob2R9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBNZXRob2QgZG9lc24ndCBzdXBwb3J0IHRhc2tzLCB3aGljaCBpcyBmaW5lIC0gbm8gZXJyb3JcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn1cbi8qKlxuICogQXNzZXJ0cyB0aGF0IHRhc2sgY3JlYXRpb24gaXMgc3VwcG9ydGVkIGZvciBzYW1wbGluZy9jcmVhdGVNZXNzYWdlIG9yIGVsaWNpdGF0aW9uL2NyZWF0ZS5cbiAqIFVzZWQgYnkgU2VydmVyLmFzc2VydFRhc2tDYXBhYmlsaXR5IGFuZCBDbGllbnQuYXNzZXJ0VGFza0hhbmRsZXJDYXBhYmlsaXR5LlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0cyAtIFRoZSB0YXNrIHJlcXVlc3RzIGNhcGFiaWxpdHkgb2JqZWN0XG4gKiBAcGFyYW0gbWV0aG9kIC0gVGhlIG1ldGhvZCBiZWluZyBjaGVja2VkXG4gKiBAcGFyYW0gZW50aXR5TmFtZSAtICdTZXJ2ZXInIG9yICdDbGllbnQnIGZvciBlcnJvciBtZXNzYWdlc1xuICogQHRocm93cyBFcnJvciBpZiB0aGUgY2FwYWJpbGl0eSBpcyBub3Qgc3VwcG9ydGVkXG4gKlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Q2xpZW50UmVxdWVzdFRhc2tDYXBhYmlsaXR5KHJlcXVlc3RzLCBtZXRob2QsIGVudGl0eU5hbWUpIHtcbiAgICBpZiAoIXJlcXVlc3RzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnRpdHlOYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHRhc2sgY3JlYXRpb24gKHJlcXVpcmVkIGZvciAke21ldGhvZH0pYCk7XG4gICAgfVxuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgIGNhc2UgJ3NhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UnOlxuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0cy5zYW1wbGluZz8uY3JlYXRlTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnRpdHlOYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHRhc2sgY3JlYXRpb24gZm9yIHNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UgKHJlcXVpcmVkIGZvciAke21ldGhvZH0pYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZWxpY2l0YXRpb24vY3JlYXRlJzpcbiAgICAgICAgICAgIGlmICghcmVxdWVzdHMuZWxpY2l0YXRpb24/LmNyZWF0ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnRpdHlOYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHRhc2sgY3JlYXRpb24gZm9yIGVsaWNpdGF0aW9uL2NyZWF0ZSAocmVxdWlyZWQgZm9yICR7bWV0aG9kfSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gTWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCB0YXNrcywgd2hpY2ggaXMgZmluZSAtIG5vIGVycm9yXG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWxwZXJzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js":
/*!**********************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js ***!
\**********************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isTerminal: () => (/* binding */ isTerminal)\n/* harmony export */ });\n/**\n * Experimental task interfaces for MCP SDK.\n * WARNING: These APIs are experimental and may change without notice.\n */\n/**\n * Checks if a task status represents a terminal state.\n * Terminal states are those where the task has finished and will not change.\n *\n * @param status - The task status to check\n * @returns True if the status is terminal (completed, failed, or cancelled)\n * @experimental\n */\nfunction isTerminal(status) {\n return status === 'completed' || status === 'failed' || status === 'cancelled';\n}\n//# sourceMappingURL=interfaces.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vZXhwZXJpbWVudGFsL3Rhc2tzL2ludGVyZmFjZXMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0Btb2RlbGNvbnRleHRwcm90b2NvbCtzZGtAMS4yOS4wX3pvZEAzLjI1Ljc2L25vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2Rpc3QvZXNtL2V4cGVyaW1lbnRhbC90YXNrcy9pbnRlcmZhY2VzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXhwZXJpbWVudGFsIHRhc2sgaW50ZXJmYWNlcyBmb3IgTUNQIFNESy5cbiAqIFdBUk5JTkc6IFRoZXNlIEFQSXMgYXJlIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS5cbiAqL1xuLyoqXG4gKiBDaGVja3MgaWYgYSB0YXNrIHN0YXR1cyByZXByZXNlbnRzIGEgdGVybWluYWwgc3RhdGUuXG4gKiBUZXJtaW5hbCBzdGF0ZXMgYXJlIHRob3NlIHdoZXJlIHRoZSB0YXNrIGhhcyBmaW5pc2hlZCBhbmQgd2lsbCBub3QgY2hhbmdlLlxuICpcbiAqIEBwYXJhbSBzdGF0dXMgLSBUaGUgdGFzayBzdGF0dXMgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0YXR1cyBpcyB0ZXJtaW5hbCAoY29tcGxldGVkLCBmYWlsZWQsIG9yIGNhbmNlbGxlZClcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGVybWluYWwoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgfHwgc3RhdHVzID09PSAnZmFpbGVkJyB8fCBzdGF0dXMgPT09ICdjYW5jZWxsZWQnO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJmYWNlcy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/errors.js":
/*!***********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/errors.js ***!
\***********************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AccessDeniedError: () => (/* binding */ AccessDeniedError),\n/* harmony export */ CustomOAuthError: () => (/* binding */ CustomOAuthError),\n/* harmony export */ InsufficientScopeError: () => (/* binding */ InsufficientScopeError),\n/* harmony export */ InvalidClientError: () => (/* binding */ InvalidClientError),\n/* harmony export */ InvalidClientMetadataError: () => (/* binding */ InvalidClientMetadataError),\n/* harmony export */ InvalidGrantError: () => (/* binding */ InvalidGrantError),\n/* harmony export */ InvalidRequestError: () => (/* binding */ InvalidRequestError),\n/* harmony export */ InvalidScopeError: () => (/* binding */ InvalidScopeError),\n/* harmony export */ InvalidTargetError: () => (/* binding */ InvalidTargetError),\n/* harmony export */ InvalidTokenError: () => (/* binding */ InvalidTokenError),\n/* harmony export */ MethodNotAllowedError: () => (/* binding */ MethodNotAllowedError),\n/* harmony export */ OAUTH_ERRORS: () => (/* binding */ OAUTH_ERRORS),\n/* harmony export */ OAuthError: () => (/* binding */ OAuthError),\n/* harmony export */ ServerError: () => (/* binding */ ServerError),\n/* harmony export */ TemporarilyUnavailableError: () => (/* binding */ TemporarilyUnavailableError),\n/* harmony export */ TooManyRequestsError: () => (/* binding */ TooManyRequestsError),\n/* harmony export */ UnauthorizedClientError: () => (/* binding */ UnauthorizedClientError),\n/* harmony export */ UnsupportedGrantTypeError: () => (/* binding */ UnsupportedGrantTypeError),\n/* harmony export */ UnsupportedResponseTypeError: () => (/* binding */ UnsupportedResponseTypeError),\n/* harmony export */ UnsupportedTokenTypeError: () => (/* binding */ UnsupportedTokenTypeError)\n/* harmony export */ });\n/**\n * Base class for all OAuth errors\n */\nclass OAuthError extends Error {\n constructor(message, errorUri) {\n super(message);\n this.errorUri = errorUri;\n this.name = this.constructor.name;\n }\n /**\n * Converts the error to a standard OAuth error response object\n */\n toResponseObject() {\n const response = {\n error: this.errorCode,\n error_description: this.message\n };\n if (this.errorUri) {\n response.error_uri = this.errorUri;\n }\n return response;\n }\n get errorCode() {\n return this.constructor.errorCode;\n }\n}\n/**\n * Invalid request error - The request is missing a required parameter,\n * includes an invalid parameter value, includes a parameter more than once,\n * or is otherwise malformed.\n */\nclass InvalidRequestError extends OAuthError {\n}\nInvalidRequestError.errorCode = 'invalid_request';\n/**\n * Invalid client error - Client authentication failed (e.g., unknown client, no client\n * authentication included, or unsupported authentication method).\n */\nclass InvalidClientError extends OAuthError {\n}\nInvalidClientError.errorCode = 'invalid_client';\n/**\n * Invalid grant error - The provided authorization grant or refresh token is\n * invalid, expired, revoked, does not match the redirection URI used in the\n * authorization request, or was issued to another client.\n */\nclass InvalidGrantError extends OAuthError {\n}\nInvalidGrantError.errorCode = 'invalid_grant';\n/**\n * Unauthorized client error - The authenticated client is not authorized to use\n * this authorization grant type.\n */\nclass UnauthorizedClientError extends OAuthError {\n}\nUnauthorizedClientError.errorCode = 'unauthorized_client';\n/**\n * Unsupported grant type error - The authorization grant type is not supported\n * by the authorization server.\n */\nclass UnsupportedGrantTypeError extends OAuthError {\n}\nUnsupportedGrantTypeError.errorCode = 'unsupported_grant_type';\n/**\n * Invalid scope error - The requested scope is invalid, unknown, malformed, or\n * exceeds the scope granted by the resource owner.\n */\nclass InvalidScopeError extends OAuthError {\n}\nInvalidScopeError.errorCode = 'invalid_scope';\n/**\n * Access denied error - The resource owner or authorization server denied the request.\n */\nclass AccessDeniedError extends OAuthError {\n}\nAccessDeniedError.errorCode = 'access_denied';\n/**\n * Server error - The authorization server encountered an unexpected condition\n * that prevented it from fulfilling the request.\n */\nclass ServerError extends OAuthError {\n}\nServerError.errorCode = 'server_error';\n/**\n * Temporarily unavailable error - The authorization server is currently unable to\n * handle the request due to a temporary overloading or maintenance of the server.\n */\nclass TemporarilyUnavailableError extends OAuthError {\n}\nTemporarilyUnavailableError.errorCode = 'temporarily_unavailable';\n/**\n * Unsupported response type error - The authorization server does not support\n * obtaining an authorization code using this method.\n */\nclass UnsupportedResponseTypeError extends OAuthError {\n}\nUnsupportedResponseTypeError.errorCode = 'unsupported_response_type';\n/**\n * Unsupported token type error - The authorization server does not support\n * the requested token type.\n */\nclass UnsupportedTokenTypeError extends OAuthError {\n}\nUnsupportedTokenTypeError.errorCode = 'unsupported_token_type';\n/**\n * Invalid token error - The access token provided is expired, revoked, malformed,\n * or invalid for other reasons.\n */\nclass InvalidTokenError extends OAuthError {\n}\nInvalidTokenError.errorCode = 'invalid_token';\n/**\n * Method not allowed error - The HTTP method used is not allowed for this endpoint.\n * (Custom, non-standard error)\n */\nclass MethodNotAllowedError extends OAuthError {\n}\nMethodNotAllowedError.errorCode = 'method_not_allowed';\n/**\n * Too many requests error - Rate limit exceeded.\n * (Custom, non-standard error based on RFC 6585)\n */\nclass TooManyRequestsError extends OAuthError {\n}\nTooManyRequestsError.errorCode = 'too_many_requests';\n/**\n * Invalid client metadata error - The client metadata is invalid.\n * (Custom error for dynamic client registration - RFC 7591)\n */\nclass InvalidClientMetadataError extends OAuthError {\n}\nInvalidClientMetadataError.errorCode = 'invalid_client_metadata';\n/**\n * Insufficient scope error - The request requires higher privileges than provided by the access token.\n */\nclass InsufficientScopeError extends OAuthError {\n}\nInsufficientScopeError.errorCode = 'insufficient_scope';\n/**\n * Invalid target error - The requested resource is invalid, missing, unknown, or malformed.\n * (Custom error for resource indicators - RFC 8707)\n */\nclass InvalidTargetError extends OAuthError {\n}\nInvalidTargetError.errorCode = 'invalid_target';\n/**\n * A utility class for defining one-off error codes\n */\nclass CustomOAuthError extends OAuthError {\n constructor(customErrorCode, message, errorUri) {\n super(message, errorUri);\n this.customErrorCode = customErrorCode;\n }\n get errorCode() {\n return this.customErrorCode;\n }\n}\n/**\n * A full list of all OAuthErrors, enabling parsing from error responses\n */\nconst OAUTH_ERRORS = {\n [InvalidRequestError.errorCode]: InvalidRequestError,\n [InvalidClientError.errorCode]: InvalidClientError,\n [InvalidGrantError.errorCode]: InvalidGrantError,\n [UnauthorizedClientError.errorCode]: UnauthorizedClientError,\n [UnsupportedGrantTypeError.errorCode]: UnsupportedGrantTypeError,\n [InvalidScopeError.errorCode]: InvalidScopeError,\n [AccessDeniedError.errorCode]: AccessDeniedError,\n [ServerError.errorCode]: ServerError,\n [TemporarilyUnavailableError.errorCode]: TemporarilyUnavailableError,\n [UnsupportedResponseTypeError.errorCode]: UnsupportedResponseTypeError,\n [UnsupportedTokenTypeError.errorCode]: UnsupportedTokenTypeError,\n [InvalidTokenError.errorCode]: InvalidTokenError,\n [MethodNotAllowedError.errorCode]: MethodNotAllowedError,\n [TooManyRequestsError.errorCode]: TooManyRequestsError,\n [InvalidClientMetadataError.errorCode]: InvalidClientMetadataError,\n [InsufficientScopeError.errorCode]: InsufficientScopeError,\n [InvalidTargetError.errorCode]: InvalidTargetError\n};\n//# sourceMappingURL=errors.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vc2VydmVyL2F1dGgvZXJyb3JzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0Btb2RlbGNvbnRleHRwcm90b2NvbCtzZGtAMS4yOS4wX3pvZEAzLjI1Ljc2L25vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2Rpc3QvZXNtL3NlcnZlci9hdXRoL2Vycm9ycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBPQXV0aCBlcnJvcnNcbiAqL1xuZXhwb3J0IGNsYXNzIE9BdXRoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgZXJyb3JVcmkpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuZXJyb3JVcmkgPSBlcnJvclVyaTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgZXJyb3IgdG8gYSBzdGFuZGFyZCBPQXV0aCBlcnJvciByZXNwb25zZSBvYmplY3RcbiAgICAgKi9cbiAgICB0b1Jlc3BvbnNlT2JqZWN0KCkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgICAgIGVycm9yOiB0aGlzLmVycm9yQ29kZSxcbiAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiB0aGlzLm1lc3NhZ2VcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JVcmkpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlLmVycm9yX3VyaSA9IHRoaXMuZXJyb3JVcmk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICBnZXQgZXJyb3JDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5lcnJvckNvZGU7XG4gICAgfVxufVxuLyoqXG4gKiBJbnZhbGlkIHJlcXVlc3QgZXJyb3IgLSBUaGUgcmVxdWVzdCBpcyBtaXNzaW5nIGEgcmVxdWlyZWQgcGFyYW1ldGVyLFxuICogaW5jbHVkZXMgYW4gaW52YWxpZCBwYXJhbWV0ZXIgdmFsdWUsIGluY2x1ZGVzIGEgcGFyYW1ldGVyIG1vcmUgdGhhbiBvbmNlLFxuICogb3IgaXMgb3RoZXJ3aXNlIG1hbGZvcm1lZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBPQXV0aEVycm9yIHtcbn1cbkludmFsaWRSZXF1ZXN0RXJyb3IuZXJyb3JDb2RlID0gJ2ludmFsaWRfcmVxdWVzdCc7XG4vKipcbiAqIEludmFsaWQgY2xpZW50IGVycm9yIC0gQ2xpZW50IGF1dGhlbnRpY2F0aW9uIGZhaWxlZCAoZS5nLiwgdW5rbm93biBjbGllbnQsIG5vIGNsaWVudFxuICogYXV0aGVudGljYXRpb24gaW5jbHVkZWQsIG9yIHVuc3VwcG9ydGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQ2xpZW50RXJyb3IgZXh0ZW5kcyBPQXV0aEVycm9yIHtcbn1cbkludmFsaWRDbGllbnRFcnJvci5lcnJvckNvZGUgPSAnaW52YWxpZF9jbGllbnQnO1xuLyoqXG4gKiBJbnZhbGlkIGdyYW50IGVycm9yIC0gVGhlIHByb3ZpZGVkIGF1dGhvcml6YXRpb24gZ3JhbnQgb3IgcmVmcmVzaCB0b2tlbiBpc1xuICogaW52YWxpZCwgZXhwaXJlZCwgcmV2b2tlZCwgZG9lcyBub3QgbWF0Y2ggdGhlIHJlZGlyZWN0aW9uIFVSSSB1c2VkIGluIHRoZVxuICogYXV0aG9yaXphdGlvbiByZXF1ZXN0LCBvciB3YXMgaXNzdWVkIHRvIGFub3RoZXIgY2xpZW50LlxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZEdyYW50RXJyb3IgZXh0ZW5kcyBPQXV0aEVycm9yIHtcbn1cbkludmFsaWRHcmFudEVycm9yLmVycm9yQ29kZSA9ICdpbnZhbGlkX2dyYW50Jztcbi8qKlxuICogVW5hdXRob3JpemVkIGNsaWVudCBlcnJvciAtIFRoZSBhdXRoZW50aWNhdGVkIGNsaWVudCBpcyBub3QgYXV0aG9yaXplZCB0byB1c2VcbiAqIHRoaXMgYXV0aG9yaXphdGlvbiBncmFudCB0eXBlLlxuICovXG5leHBvcnQgY2xhc3MgVW5hdXRob3JpemVkQ2xpZW50RXJyb3IgZXh0ZW5kcyBPQXV0aEVycm9yIHtcbn1cblVuYXV0aG9yaXplZENsaWVudEVycm9yLmVycm9yQ29kZSA9ICd1bmF1dGhvcml6ZWRfY2xpZW50Jztcbi8qKlxuICogVW5zdXBwb3J0ZWQgZ3JhbnQgdHlwZSBlcnJvciAtIFRoZSBhdXRob3JpemF0aW9uIGdyYW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZFxuICogYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLlxuICovXG5leHBvcnQgY2xhc3MgVW5zdXBwb3J0ZWRHcmFudFR5cGVFcnJvciBleHRlbmRzIE9BdXRoRXJyb3Ige1xufVxuVW5zdXBwb3J0ZWRHcmFudFR5cGVFcnJvci5lcnJvckNvZGUgPSAndW5zdXBwb3J0ZWRfZ3JhbnRfdHlwZSc7XG4vKipcbiAqIEludmFsaWQgc2NvcGUgZXJyb3IgLSBUaGUgcmVxdWVzdGVkIHNjb3BlIGlzIGludmFsaWQsIHVua25vd24sIG1hbGZvcm1lZCwgb3JcbiAqIGV4Y2VlZHMgdGhlIHNjb3BlIGdyYW50ZWQgYnkgdGhlIHJlc291cmNlIG93bmVyLlxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZFNjb3BlRXJyb3IgZXh0ZW5kcyBPQXV0aEVycm9yIHtcbn1cbkludmFsaWRTY29wZUVycm9yLmVycm9yQ29kZSA9ICdpbnZhbGlkX3Njb3BlJztcbi8qKlxuICogQWNjZXNzIGRlbmllZCBlcnJvciAtIFRoZSByZXNvdXJjZSBvd25lciBvciBhdXRob3JpemF0aW9uIHNlcnZlciBkZW5pZWQgdGhlIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBBY2Nlc3NEZW5pZWRFcnJvciBleHRlbmRzIE9BdXRoRXJyb3Ige1xufVxuQWNjZXNzRGVuaWVkRXJyb3IuZXJyb3JDb2RlID0gJ2FjY2Vzc19kZW5pZWQnO1xuLyoqXG4gKiBTZXJ2ZXIgZXJyb3IgLSBUaGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgZW5jb3VudGVyZWQgYW4gdW5leHBlY3RlZCBjb25kaXRpb25cbiAqIHRoYXQgcHJldmVudGVkIGl0IGZyb20gZnVsZmlsbGluZyB0aGUgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlcnZlckVycm9yIGV4dGVuZHMgT0F1dGhFcnJvciB7XG59XG5TZXJ2ZXJFcnJvci5lcnJvckNvZGUgPSAnc2VydmVyX2Vycm9yJztcbi8qKlxuICogVGVtcG9yYXJpbHkgdW5hdmFpbGFibGUgZXJyb3IgLSBUaGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgaXMgY3VycmVudGx5IHVuYWJsZSB0b1xuICogaGFuZGxlIHRoZSByZXF1ZXN0IGR1ZSB0byBhIHRlbXBvcmFyeSBvdmVybG9hZGluZyBvciBtYWludGVuYW5jZSBvZiB0aGUgc2VydmVyLlxuICovXG5leHBvcnQgY2xhc3MgVGVtcG9yYXJpbHlVbmF2YWlsYWJsZUVycm9yIGV4dGVuZHMgT0F1dGhFcnJvciB7XG59XG5UZW1wb3JhcmlseVVuYXZhaWxhYmxlRXJyb3IuZXJyb3JDb2RlID0gJ3RlbXBvcmFyaWx5X3VuYXZhaWxhYmxlJztcbi8qKlxuICogVW5zdXBwb3J0ZWQgcmVzcG9uc2UgdHlwZSBlcnJvciAtIFRoZSBhdXRob3JpemF0aW9uIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0XG4gKiBvYnRhaW5pbmcgYW4gYXV0aG9yaXphdGlvbiBjb2RlIHVzaW5nIHRoaXMgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgVW5zdXBwb3J0ZWRSZXNwb25zZVR5cGVFcnJvciBleHRlbmRzIE9BdXRoRXJyb3Ige1xufVxuVW5zdXBwb3J0ZWRSZXNwb25zZVR5cGVFcnJvci5lcnJvckNvZGUgPSAndW5zdXBwb3J0ZWRfcmVzcG9uc2VfdHlwZSc7XG4vKipcbiAqIFVuc3VwcG9ydGVkIHRva2VuIHR5cGUgZXJyb3IgLSBUaGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhlIHJlcXVlc3RlZCB0b2tlbiB0eXBlLlxuICovXG5leHBvcnQgY2xhc3MgVW5zdXBwb3J0ZWRUb2tlblR5cGVFcnJvciBleHRlbmRzIE9BdXRoRXJyb3Ige1xufVxuVW5zdXBwb3J0ZWRUb2tlblR5cGVFcnJvci5lcnJvckNvZGUgPSAndW5zdXBwb3J0ZWRfdG9rZW5fdHlwZSc7XG4vKipcbiAqIEludmFsaWQgdG9rZW4gZXJyb3IgLSBUaGUgYWNjZXNzIHRva2VuIHByb3ZpZGVkIGlzIGV4cGlyZWQsIHJldm9rZWQsIG1hbGZvcm1lZCxcbiAqIG9yIGludmFsaWQgZm9yIG90aGVyIHJlYXNvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkVG9rZW5FcnJvciBleHRlbmRzIE9BdXRoRXJyb3Ige1xufVxuSW52YWxpZFRva2VuRXJyb3IuZXJyb3JDb2RlID0gJ2ludmFsaWRfdG9rZW4nO1xuLyoqXG4gKiBNZXRob2Qgbm90IGFsbG93ZWQgZXJyb3IgLSBUaGUgSFRUUCBtZXRob2QgdXNlZCBpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyBlbmRwb2ludC5cbiAqIChDdXN0b20sIG5vbi1zdGFuZGFyZCBlcnJvcilcbiAqL1xuZXhwb3J0IGNsYXNzIE1ldGhvZE5vdEFsbG93ZWRFcnJvciBleHRlbmRzIE9BdXRoRXJyb3Ige1xufVxuTWV0aG9kTm90QWxsb3dlZEVycm9yLmVycm9yQ29kZSA9ICdtZXRob2Rfbm90X2FsbG93ZWQnO1xuLyoqXG4gKiBUb28gbWFueSByZXF1ZXN0cyBlcnJvciAtIFJhdGUgbGltaXQgZXhjZWVkZWQuXG4gKiAoQ3VzdG9tLCBub24tc3RhbmRhcmQgZXJyb3IgYmFzZWQgb24gUkZDIDY1ODUpXG4gKi9cbmV4cG9ydCBjbGFzcyBUb29NYW55UmVxdWVzdHNFcnJvciBleHRlbmRzIE9BdXRoRXJyb3Ige1xufVxuVG9vTWFueVJlcXVlc3RzRXJyb3IuZXJyb3JDb2RlID0gJ3Rvb19tYW55X3JlcXVlc3RzJztcbi8qKlxuICogSW52YWxpZCBjbGllbnQgbWV0YWRhdGEgZXJyb3IgLSBUaGUgY2xpZW50IG1ldGFkYXRhIGlzIGludmFsaWQuXG4gKiAoQ3VzdG9tIGVycm9yIGZvciBkeW5hbWljIGNsaWVudCByZWdpc3RyYXRpb24gLSBSRkMgNzU5MSlcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRDbGllbnRNZXRhZGF0YUVycm9yIGV4dGVuZHMgT0F1dGhFcnJvciB7XG59XG5JbnZhbGlkQ2xpZW50TWV0YWRhdGFFcnJvci5lcnJvckNvZGUgPSAnaW52YWxpZF9jbGllbnRfbWV0YWRhdGEnO1xuLyoqXG4gKiBJbnN1ZmZpY2llbnQgc2NvcGUgZXJyb3IgLSBUaGUgcmVxdWVzdCByZXF1aXJlcyBoaWdoZXIgcHJpdmlsZWdlcyB0aGFuIHByb3ZpZGVkIGJ5IHRoZSBhY2Nlc3MgdG9rZW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnN1ZmZpY2llbnRTY29wZUVycm9yIGV4dGVuZHMgT0F1dGhFcnJvciB7XG59XG5JbnN1ZmZpY2llbnRTY29wZUVycm9yLmVycm9yQ29kZSA9ICdpbnN1ZmZpY2llbnRfc2NvcGUnO1xuLyoqXG4gKiBJbnZhbGlkIHRhcmdldCBlcnJvciAtIFRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgaXMgaW52YWxpZCwgbWlzc2luZywgdW5rbm93biwgb3IgbWFsZm9ybWVkLlxuICogKEN1c3RvbSBlcnJvciBmb3IgcmVzb3VyY2UgaW5kaWNhdG9ycyAtIFJGQyA4NzA3KVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZFRhcmdldEVycm9yIGV4dGVuZHMgT0F1dGhFcnJvciB7XG59XG5JbnZhbGlkVGFyZ2V0RXJyb3IuZXJyb3JDb2RlID0gJ2ludmFsaWRfdGFyZ2V0Jztcbi8qKlxuICogQSB1dGlsaXR5IGNsYXNzIGZvciBkZWZpbmluZyBvbmUtb2ZmIGVycm9yIGNvZGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21PQXV0aEVycm9yIGV4dGVuZHMgT0F1dGhFcnJvciB7XG4gICAgY29uc3RydWN0b3IoY3VzdG9tRXJyb3JDb2RlLCBtZXNzYWdlLCBlcnJvclVyaSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlLCBlcnJvclVyaSk7XG4gICAgICAgIHRoaXMuY3VzdG9tRXJyb3JDb2RlID0gY3VzdG9tRXJyb3JDb2RlO1xuICAgIH1cbiAgICBnZXQgZXJyb3JDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21FcnJvckNvZGU7XG4gICAgfVxufVxuLyoqXG4gKiBBIGZ1bGwgbGlzdCBvZiBhbGwgT0F1dGhFcnJvcnMsIGVuYWJsaW5nIHBhcnNpbmcgZnJvbSBlcnJvciByZXNwb25zZXNcbiAqL1xuZXhwb3J0IGNvbnN0IE9BVVRIX0VSUk9SUyA9IHtcbiAgICBbSW52YWxpZFJlcXVlc3RFcnJvci5lcnJvckNvZGVdOiBJbnZhbGlkUmVxdWVzdEVycm9yLFxuICAgIFtJbnZhbGlkQ2xpZW50RXJyb3IuZXJyb3JDb2RlXTogSW52YWxpZENsaWVudEVycm9yLFxuICAgIFtJbnZhbGlkR3JhbnRFcnJvci5lcnJvckNvZGVdOiBJbnZhbGlkR3JhbnRFcnJvcixcbiAgICBbVW5hdXRob3JpemVkQ2xpZW50RXJyb3IuZXJyb3JDb2RlXTogVW5hdXRob3JpemVkQ2xpZW50RXJyb3IsXG4gICAgW1Vuc3VwcG9ydGVkR3JhbnRUeXBlRXJyb3IuZXJyb3JDb2RlXTogVW5zdXBwb3J0ZWRHcmFudFR5cGVFcnJvcixcbiAgICBbSW52YWxpZFNjb3BlRXJyb3IuZXJyb3JDb2RlXTogSW52YWxpZFNjb3BlRXJyb3IsXG4gICAgW0FjY2Vzc0RlbmllZEVycm9yLmVycm9yQ29kZV06IEFjY2Vzc0RlbmllZEVycm9yLFxuICAgIFtTZXJ2ZXJFcnJvci5lcnJvckNvZGVdOiBTZXJ2ZXJFcnJvcixcbiAgICBbVGVtcG9yYXJpbHlVbmF2YWlsYWJsZUVycm9yLmVycm9yQ29kZV06IFRlbXBvcmFyaWx5VW5hdmFpbGFibGVFcnJvcixcbiAgICBbVW5zdXBwb3J0ZWRSZXNwb25zZVR5cGVFcnJvci5lcnJvckNvZGVdOiBVbnN1cHBvcnRlZFJlc3BvbnNlVHlwZUVycm9yLFxuICAgIFtVbnN1cHBvcnRlZFRva2VuVHlwZUVycm9yLmVycm9yQ29kZV06IFVuc3VwcG9ydGVkVG9rZW5UeXBlRXJyb3IsXG4gICAgW0ludmFsaWRUb2tlbkVycm9yLmVycm9yQ29kZV06IEludmFsaWRUb2tlbkVycm9yLFxuICAgIFtNZXRob2ROb3RBbGxvd2VkRXJyb3IuZXJyb3JDb2RlXTogTWV0aG9kTm90QWxsb3dlZEVycm9yLFxuICAgIFtUb29NYW55UmVxdWVzdHNFcnJvci5lcnJvckNvZGVdOiBUb29NYW55UmVxdWVzdHNFcnJvcixcbiAgICBbSW52YWxpZENsaWVudE1ldGFkYXRhRXJyb3IuZXJyb3JDb2RlXTogSW52YWxpZENsaWVudE1ldGFkYXRhRXJyb3IsXG4gICAgW0luc3VmZmljaWVudFNjb3BlRXJyb3IuZXJyb3JDb2RlXTogSW5zdWZmaWNpZW50U2NvcGVFcnJvcixcbiAgICBbSW52YWxpZFRhcmdldEVycm9yLmVycm9yQ29kZV06IEludmFsaWRUYXJnZXRFcnJvclxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/errors.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js":
/*!**********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js ***!
\**********************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getLiteralValue: () => (/* binding */ getLiteralValue),\n/* harmony export */ getObjectShape: () => (/* binding */ getObjectShape),\n/* harmony export */ getParseErrorMessage: () => (/* binding */ getParseErrorMessage),\n/* harmony export */ getSchemaDescription: () => (/* binding */ getSchemaDescription),\n/* harmony export */ isSchemaOptional: () => (/* binding */ isSchemaOptional),\n/* harmony export */ isZ4Schema: () => (/* binding */ isZ4Schema),\n/* harmony export */ normalizeObjectSchema: () => (/* binding */ normalizeObjectSchema),\n/* harmony export */ objectFromShape: () => (/* binding */ objectFromShape),\n/* harmony export */ safeParse: () => (/* binding */ safeParse),\n/* harmony export */ safeParseAsync: () => (/* binding */ safeParseAsync)\n/* harmony export */ });\n/* harmony import */ var zod_v3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zod/v3 */ \"(rsc)/./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js\");\n/* harmony import */ var zod_v4_mini__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zod/v4-mini */ \"(rsc)/./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/mini/schemas.js\");\n/* harmony import */ var zod_v4_mini__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! zod/v4-mini */ \"(rsc)/./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/parse.js\");\n// zod-compat.ts\n// ----------------------------------------------------\n// Unified types + helpers to accept Zod v3 and v4 (Mini)\n// ----------------------------------------------------\n\n\n// --- Runtime detection ---\nfunction isZ4Schema(s) {\n // Present on Zod 4 (Classic & Mini) schemas; absent on Zod 3\n const schema = s;\n return !!schema._zod;\n}\n// --- Schema construction ---\nfunction objectFromShape(shape) {\n const values = Object.values(shape);\n if (values.length === 0)\n return zod_v4_mini__WEBPACK_IMPORTED_MODULE_0__.object({}); // default to v4 Mini\n const allV4 = values.every(isZ4Schema);\n const allV3 = values.every(s => !isZ4Schema(s));\n if (allV4)\n return zod_v4_mini__WEBPACK_IMPORTED_MODULE_0__.object(shape);\n if (allV3)\n return zod_v3__WEBPACK_IMPORTED_MODULE_1__.object(shape);\n throw new Error('Mixed Zod versions detected in object shape.');\n}\n// --- Unified parsing ---\nfunction safeParse(schema, data) {\n if (isZ4Schema(schema)) {\n // Mini exposes top-level safeParse\n const result = zod_v4_mini__WEBPACK_IMPORTED_MODULE_2__.safeParse(schema, data);\n return result;\n }\n const v3Schema = schema;\n const result = v3Schema.safeParse(data);\n return result;\n}\nasync function safeParseAsync(schema, data) {\n if (isZ4Schema(schema)) {\n // Mini exposes top-level safeParseAsync\n const result = await zod_v4_mini__WEBPACK_IMPORTED_MODULE_2__.safeParseAsync(schema, data);\n return result;\n }\n const v3Schema = schema;\n const result = await v3Schema.safeParseAsync(data);\n return result;\n}\n// --- Shape extraction ---\nfunction getObjectShape(schema) {\n if (!schema)\n return undefined;\n // Zod v3 exposes `.shape`; Zod v4 keeps the shape on `_zod.def.shape`\n let rawShape;\n if (isZ4Schema(schema)) {\n const v4Schema = schema;\n rawShape = v4Schema._zod?.def?.shape;\n }\n else {\n const v3Schema = schema;\n rawShape = v3Schema.shape;\n }\n if (!rawShape)\n return undefined;\n if (typeof rawShape === 'function') {\n try {\n return rawShape();\n }\n catch {\n return undefined;\n }\n }\n return rawShape;\n}\n// --- Schema normalization ---\n/**\n * Normalizes a schema to an object schema. Handles both:\n * - Already-constructed object schemas (v3 or v4)\n * - Raw shapes that need to be wrapped into object schemas\n */\nfunction normalizeObjectSchema(schema) {\n if (!schema)\n return undefined;\n // First check if it's a raw shape (Record<string, AnySchema>)\n // Raw shapes don't have _def or _zod properties and aren't schemas themselves\n if (typeof schema === 'object') {\n // Check if it's actually a ZodRawShapeCompat (not a schema instance)\n // by checking if it lacks schema-like internal properties\n const asV3 = schema;\n const asV4 = schema;\n // If it's not a schema instance (no _def or _zod), it might be a raw shape\n if (!asV3._def && !asV4._zod) {\n // Check if all values are schemas (heuristic to confirm it's a raw shape)\n const values = Object.values(schema);\n if (values.length > 0 &&\n values.every(v => typeof v === 'object' &&\n v !== null &&\n (v._def !== undefined ||\n v._zod !== undefined ||\n typeof v.parse === 'function'))) {\n return objectFromShape(schema);\n }\n }\n }\n // If we get here, it should be an AnySchema (not a raw shape)\n // Check if it's already an object schema\n if (isZ4Schema(schema)) {\n // Check if it's a v4 object\n const v4Schema = schema;\n const def = v4Schema._zod?.def;\n if (def && (def.type === 'object' || def.shape !== undefined)) {\n return schema;\n }\n }\n else {\n // Check if it's a v3 object\n const v3Schema = schema;\n if (v3Schema.shape !== undefined) {\n return schema;\n }\n }\n return undefined;\n}\n// --- Error message extraction ---\n/**\n * Safely extracts an error message from a parse result error.\n * Zod errors can have different structures, so we handle various cases.\n */\nfunction getParseErrorMessage(error) {\n if (error && typeof error === 'object') {\n // Try common error structures\n if ('message' in error && typeof error.message === 'string') {\n return error.message;\n }\n if ('issues' in error && Array.isArray(error.issues) && error.issues.length > 0) {\n const firstIssue = error.issues[0];\n if (firstIssue && typeof firstIssue === 'object' && 'message' in firstIssue) {\n return String(firstIssue.message);\n }\n }\n // Fallback: try to stringify the error\n try {\n return JSON.stringify(error);\n }\n catch {\n return String(error);\n }\n }\n return String(error);\n}\n// --- Schema metadata access ---\n/**\n * Gets the description from a schema, if available.\n * Works with both Zod v3 and v4.\n *\n * Both versions expose a `.description` getter that returns the description\n * from their respective internal storage (v3: _def, v4: globalRegistry).\n */\nfunction getSchemaDescription(schema) {\n return schema.description;\n}\n/**\n * Checks if a schema is optional.\n * Works with both Zod v3 and v4.\n */\nfunction isSchemaOptional(schema) {\n if (isZ4Schema(schema)) {\n const v4Schema = schema;\n return v4Schema._zod?.def?.type === 'optional';\n }\n const v3Schema = schema;\n // v3 has isOptional() method\n if (typeof schema.isOptional === 'function') {\n return schema.isOptional();\n }\n return v3Schema._def?.typeName === 'ZodOptional';\n}\n/**\n * Gets the literal value from a schema, if it's a literal schema.\n * Works with both Zod v3 and v4.\n * Returns undefined if the schema is not a literal or the value cannot be determined.\n */\nfunction getLiteralValue(schema) {\n if (isZ4Schema(schema)) {\n const v4Schema = schema;\n const def = v4Schema._zod?.def;\n if (def) {\n // Try various ways to get the literal value\n if (def.value !== undefined)\n return def.value;\n if (Array.isArray(def.values) && def.values.length > 0) {\n return def.values[0];\n }\n }\n }\n const v3Schema = schema;\n const def = v3Schema._def;\n if (def) {\n if (def.value !== undefined)\n return def.value;\n if (Array.isArray(def.values) && def.values.length > 0) {\n return def.values[0];\n }\n }\n // Fallback: check for direct value property (some Zod versions)\n const directValue = schema.value;\n if (directValue !== undefined)\n return directValue;\n return undefined;\n}\n//# sourceMappingURL=zod-compat.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vc2VydmVyL3pvZC1jb21wYXQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQytCO0FBQ087QUFDdEM7QUFDTztBQUNQLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLGVBQWUsK0NBQWEsR0FBRyxHQUFHO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0NBQWE7QUFDNUI7QUFDQSxlQUFlLDBDQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLHVCQUF1QixrREFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0EsNkJBQTZCLHVEQUFxQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0Btb2RlbGNvbnRleHRwcm90b2NvbCtzZGtAMS4yOS4wX3pvZEAzLjI1Ljc2L25vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2Rpc3QvZXNtL3NlcnZlci96b2QtY29tcGF0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHpvZC1jb21wYXQudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFVuaWZpZWQgdHlwZXMgKyBoZWxwZXJzIHRvIGFjY2VwdCBab2QgdjMgYW5kIHY0IChNaW5pKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuaW1wb3J0ICogYXMgejNydCBmcm9tICd6b2QvdjMnO1xuaW1wb3J0ICogYXMgejRtaW5pIGZyb20gJ3pvZC92NC1taW5pJztcbi8vIC0tLSBSdW50aW1lIGRldGVjdGlvbiAtLS1cbmV4cG9ydCBmdW5jdGlvbiBpc1o0U2NoZW1hKHMpIHtcbiAgICAvLyBQcmVzZW50IG9uIFpvZCA0IChDbGFzc2ljICYgTWluaSkgc2NoZW1hczsgYWJzZW50IG9uIFpvZCAzXG4gICAgY29uc3Qgc2NoZW1hID0gcztcbiAgICByZXR1cm4gISFzY2hlbWEuX3pvZDtcbn1cbi8vIC0tLSBTY2hlbWEgY29uc3RydWN0aW9uIC0tLVxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEZyb21TaGFwZShzaGFwZSkge1xuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMoc2hhcGUpO1xuICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gejRtaW5pLm9iamVjdCh7fSk7IC8vIGRlZmF1bHQgdG8gdjQgTWluaVxuICAgIGNvbnN0IGFsbFY0ID0gdmFsdWVzLmV2ZXJ5KGlzWjRTY2hlbWEpO1xuICAgIGNvbnN0IGFsbFYzID0gdmFsdWVzLmV2ZXJ5KHMgPT4gIWlzWjRTY2hlbWEocykpO1xuICAgIGlmIChhbGxWNClcbiAgICAgICAgcmV0dXJuIHo0bWluaS5vYmplY3Qoc2hhcGUpO1xuICAgIGlmIChhbGxWMylcbiAgICAgICAgcmV0dXJuIHozcnQub2JqZWN0KHNoYXBlKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01peGVkIFpvZCB2ZXJzaW9ucyBkZXRlY3RlZCBpbiBvYmplY3Qgc2hhcGUuJyk7XG59XG4vLyAtLS0gVW5pZmllZCBwYXJzaW5nIC0tLVxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVQYXJzZShzY2hlbWEsIGRhdGEpIHtcbiAgICBpZiAoaXNaNFNjaGVtYShzY2hlbWEpKSB7XG4gICAgICAgIC8vIE1pbmkgZXhwb3NlcyB0b3AtbGV2ZWwgc2FmZVBhcnNlXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHo0bWluaS5zYWZlUGFyc2Uoc2NoZW1hLCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgdjNTY2hlbWEgPSBzY2hlbWE7XG4gICAgY29uc3QgcmVzdWx0ID0gdjNTY2hlbWEuc2FmZVBhcnNlKGRhdGEpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FmZVBhcnNlQXN5bmMoc2NoZW1hLCBkYXRhKSB7XG4gICAgaWYgKGlzWjRTY2hlbWEoc2NoZW1hKSkge1xuICAgICAgICAvLyBNaW5pIGV4cG9zZXMgdG9wLWxldmVsIHNhZmVQYXJzZUFzeW5jXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHo0bWluaS5zYWZlUGFyc2VBc3luYyhzY2hlbWEsIGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCB2M1NjaGVtYSA9IHNjaGVtYTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2M1NjaGVtYS5zYWZlUGFyc2VBc3luYyhkYXRhKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLy8gLS0tIFNoYXBlIGV4dHJhY3Rpb24gLS0tXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JqZWN0U2hhcGUoc2NoZW1hKSB7XG4gICAgaWYgKCFzY2hlbWEpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy8gWm9kIHYzIGV4cG9zZXMgYC5zaGFwZWA7IFpvZCB2NCBrZWVwcyB0aGUgc2hhcGUgb24gYF96b2QuZGVmLnNoYXBlYFxuICAgIGxldCByYXdTaGFwZTtcbiAgICBpZiAoaXNaNFNjaGVtYShzY2hlbWEpKSB7XG4gICAgICAgIGNvbnN0IHY0U2NoZW1hID0gc2NoZW1hO1xuICAgICAgICByYXdTaGFwZSA9IHY0U2NoZW1hLl96b2Q/LmRlZj8uc2hhcGU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCB2M1NjaGVtYSA9IHNjaGVtYTtcbiAgICAgICAgcmF3U2hhcGUgPSB2M1NjaGVtYS5zaGFwZTtcbiAgICB9XG4gICAgaWYgKCFyYXdTaGFwZSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZW9mIHJhd1NoYXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gcmF3U2hhcGUoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByYXdTaGFwZTtcbn1cbi8vIC0tLSBTY2hlbWEgbm9ybWFsaXphdGlvbiAtLS1cbi8qKlxuICogTm9ybWFsaXplcyBhIHNjaGVtYSB0byBhbiBvYmplY3Qgc2NoZW1hLiBIYW5kbGVzIGJvdGg6XG4gKiAtIEFscmVhZHktY29uc3RydWN0ZWQgb2JqZWN0IHNjaGVtYXMgKHYzIG9yIHY0KVxuICogLSBSYXcgc2hhcGVzIHRoYXQgbmVlZCB0byBiZSB3cmFwcGVkIGludG8gb2JqZWN0IHNjaGVtYXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFNjaGVtYShzY2hlbWEpIHtcbiAgICBpZiAoIXNjaGVtYSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiBpdCdzIGEgcmF3IHNoYXBlIChSZWNvcmQ8c3RyaW5nLCBBbnlTY2hlbWE+KVxuICAgIC8vIFJhdyBzaGFwZXMgZG9uJ3QgaGF2ZSBfZGVmIG9yIF96b2QgcHJvcGVydGllcyBhbmQgYXJlbid0IHNjaGVtYXMgdGhlbXNlbHZlc1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGFjdHVhbGx5IGEgWm9kUmF3U2hhcGVDb21wYXQgKG5vdCBhIHNjaGVtYSBpbnN0YW5jZSlcbiAgICAgICAgLy8gYnkgY2hlY2tpbmcgaWYgaXQgbGFja3Mgc2NoZW1hLWxpa2UgaW50ZXJuYWwgcHJvcGVydGllc1xuICAgICAgICBjb25zdCBhc1YzID0gc2NoZW1hO1xuICAgICAgICBjb25zdCBhc1Y0ID0gc2NoZW1hO1xuICAgICAgICAvLyBJZiBpdCdzIG5vdCBhIHNjaGVtYSBpbnN0YW5jZSAobm8gX2RlZiBvciBfem9kKSwgaXQgbWlnaHQgYmUgYSByYXcgc2hhcGVcbiAgICAgICAgaWYgKCFhc1YzLl9kZWYgJiYgIWFzVjQuX3pvZCkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgYWxsIHZhbHVlcyBhcmUgc2NoZW1hcyAoaGV1cmlzdGljIHRvIGNvbmZpcm0gaXQncyBhIHJhdyBzaGFwZSlcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMoc2NoZW1hKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIHZhbHVlcy5ldmVyeSh2ID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICAgICB2ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgICh2Ll9kZWYgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdi5fem9kICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2LnBhcnNlID09PSAnZnVuY3Rpb24nKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0RnJvbVNoYXBlKHNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgd2UgZ2V0IGhlcmUsIGl0IHNob3VsZCBiZSBhbiBBbnlTY2hlbWEgKG5vdCBhIHJhdyBzaGFwZSlcbiAgICAvLyBDaGVjayBpZiBpdCdzIGFscmVhZHkgYW4gb2JqZWN0IHNjaGVtYVxuICAgIGlmIChpc1o0U2NoZW1hKHNjaGVtYSkpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIHY0IG9iamVjdFxuICAgICAgICBjb25zdCB2NFNjaGVtYSA9IHNjaGVtYTtcbiAgICAgICAgY29uc3QgZGVmID0gdjRTY2hlbWEuX3pvZD8uZGVmO1xuICAgICAgICBpZiAoZGVmICYmIChkZWYudHlwZSA9PT0gJ29iamVjdCcgfHwgZGVmLnNoYXBlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgdjMgb2JqZWN0XG4gICAgICAgIGNvbnN0IHYzU2NoZW1hID0gc2NoZW1hO1xuICAgICAgICBpZiAodjNTY2hlbWEuc2hhcGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLy8gLS0tIEVycm9yIG1lc3NhZ2UgZXh0cmFjdGlvbiAtLS1cbi8qKlxuICogU2FmZWx5IGV4dHJhY3RzIGFuIGVycm9yIG1lc3NhZ2UgZnJvbSBhIHBhcnNlIHJlc3VsdCBlcnJvci5cbiAqIFpvZCBlcnJvcnMgY2FuIGhhdmUgZGlmZmVyZW50IHN0cnVjdHVyZXMsIHNvIHdlIGhhbmRsZSB2YXJpb3VzIGNhc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyc2VFcnJvck1lc3NhZ2UoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBUcnkgY29tbW9uIGVycm9yIHN0cnVjdHVyZXNcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiBlcnJvciAmJiB0eXBlb2YgZXJyb3IubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgnaXNzdWVzJyBpbiBlcnJvciAmJiBBcnJheS5pc0FycmF5KGVycm9yLmlzc3VlcykgJiYgZXJyb3IuaXNzdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SXNzdWUgPSBlcnJvci5pc3N1ZXNbMF07XG4gICAgICAgICAgICBpZiAoZmlyc3RJc3N1ZSAmJiB0eXBlb2YgZmlyc3RJc3N1ZSA9PT0gJ29iamVjdCcgJiYgJ21lc3NhZ2UnIGluIGZpcnN0SXNzdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZpcnN0SXNzdWUubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmFsbGJhY2s6IHRyeSB0byBzdHJpbmdpZnkgdGhlIGVycm9yXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcoZXJyb3IpO1xufVxuLy8gLS0tIFNjaGVtYSBtZXRhZGF0YSBhY2Nlc3MgLS0tXG4vKipcbiAqIEdldHMgdGhlIGRlc2NyaXB0aW9uIGZyb20gYSBzY2hlbWEsIGlmIGF2YWlsYWJsZS5cbiAqIFdvcmtzIHdpdGggYm90aCBab2QgdjMgYW5kIHY0LlxuICpcbiAqIEJvdGggdmVyc2lvbnMgZXhwb3NlIGEgYC5kZXNjcmlwdGlvbmAgZ2V0dGVyIHRoYXQgcmV0dXJucyB0aGUgZGVzY3JpcHRpb25cbiAqIGZyb20gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCBzdG9yYWdlICh2MzogX2RlZiwgdjQ6IGdsb2JhbFJlZ2lzdHJ5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYURlc2NyaXB0aW9uKHNjaGVtYSkge1xuICAgIHJldHVybiBzY2hlbWEuZGVzY3JpcHRpb247XG59XG4vKipcbiAqIENoZWNrcyBpZiBhIHNjaGVtYSBpcyBvcHRpb25hbC5cbiAqIFdvcmtzIHdpdGggYm90aCBab2QgdjMgYW5kIHY0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTY2hlbWFPcHRpb25hbChzY2hlbWEpIHtcbiAgICBpZiAoaXNaNFNjaGVtYShzY2hlbWEpKSB7XG4gICAgICAgIGNvbnN0IHY0U2NoZW1hID0gc2NoZW1hO1xuICAgICAgICByZXR1cm4gdjRTY2hlbWEuX3pvZD8uZGVmPy50eXBlID09PSAnb3B0aW9uYWwnO1xuICAgIH1cbiAgICBjb25zdCB2M1NjaGVtYSA9IHNjaGVtYTtcbiAgICAvLyB2MyBoYXMgaXNPcHRpb25hbCgpIG1ldGhvZFxuICAgIGlmICh0eXBlb2Ygc2NoZW1hLmlzT3B0aW9uYWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYS5pc09wdGlvbmFsKCk7XG4gICAgfVxuICAgIHJldHVybiB2M1NjaGVtYS5fZGVmPy50eXBlTmFtZSA9PT0gJ1pvZE9wdGlvbmFsJztcbn1cbi8qKlxuICogR2V0cyB0aGUgbGl0ZXJhbCB2YWx1ZSBmcm9tIGEgc2NoZW1hLCBpZiBpdCdzIGEgbGl0ZXJhbCBzY2hlbWEuXG4gKiBXb3JrcyB3aXRoIGJvdGggWm9kIHYzIGFuZCB2NC5cbiAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBzY2hlbWEgaXMgbm90IGEgbGl0ZXJhbCBvciB0aGUgdmFsdWUgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXRlcmFsVmFsdWUoc2NoZW1hKSB7XG4gICAgaWYgKGlzWjRTY2hlbWEoc2NoZW1hKSkge1xuICAgICAgICBjb25zdCB2NFNjaGVtYSA9IHNjaGVtYTtcbiAgICAgICAgY29uc3QgZGVmID0gdjRTY2hlbWEuX3pvZD8uZGVmO1xuICAgICAgICBpZiAoZGVmKSB7XG4gICAgICAgICAgICAvLyBUcnkgdmFyaW91cyB3YXlzIHRvIGdldCB0aGUgbGl0ZXJhbCB2YWx1ZVxuICAgICAgICAgICAgaWYgKGRlZi52YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBkZWYudmFsdWU7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWYudmFsdWVzKSAmJiBkZWYudmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmLnZhbHVlc1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB2M1NjaGVtYSA9IHNjaGVtYTtcbiAgICBjb25zdCBkZWYgPSB2M1NjaGVtYS5fZGVmO1xuICAgIGlmIChkZWYpIHtcbiAgICAgICAgaWYgKGRlZi52YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIGRlZi52YWx1ZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmLnZhbHVlcykgJiYgZGVmLnZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmLnZhbHVlc1swXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBGYWxsYmFjazogY2hlY2sgZm9yIGRpcmVjdCB2YWx1ZSBwcm9wZXJ0eSAoc29tZSBab2QgdmVyc2lvbnMpXG4gICAgY29uc3QgZGlyZWN0VmFsdWUgPSBzY2hlbWEudmFsdWU7XG4gICAgaWYgKGRpcmVjdFZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBkaXJlY3RWYWx1ZTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9em9kLWNvbXBhdC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js":
/*!**********************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js ***!
\**********************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getMethodLiteral: () => (/* binding */ getMethodLiteral),\n/* harmony export */ parseWithCompat: () => (/* binding */ parseWithCompat),\n/* harmony export */ toJsonSchemaCompat: () => (/* binding */ toJsonSchemaCompat)\n/* harmony export */ });\n/* harmony import */ var zod_v4_mini__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! zod/v4-mini */ \"(rsc)/./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/to-json-schema.js\");\n/* harmony import */ var _zod_compat_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./zod-compat.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js\");\n/* harmony import */ var zod_to_json_schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zod-to-json-schema */ \"(rsc)/./node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/index.js\");\n// zod-json-schema-compat.ts\n// ----------------------------------------------------\n// JSON Schema conversion for both Zod v3 and Zod v4 (Mini)\n// v3 uses your vendored converter; v4 uses Mini's toJSONSchema\n// ----------------------------------------------------\n\n\n\nfunction mapMiniTarget(t) {\n if (!t)\n return 'draft-7';\n if (t === 'jsonSchema7' || t === 'draft-7')\n return 'draft-7';\n if (t === 'jsonSchema2019-09' || t === 'draft-2020-12')\n return 'draft-2020-12';\n return 'draft-7'; // fallback\n}\nfunction toJsonSchemaCompat(schema, opts) {\n if ((0,_zod_compat_js__WEBPACK_IMPORTED_MODULE_0__.isZ4Schema)(schema)) {\n // v4 branch — use Mini's built-in toJSONSchema\n return zod_v4_mini__WEBPACK_IMPORTED_MODULE_2__.toJSONSchema(schema, {\n target: mapMiniTarget(opts?.target),\n io: opts?.pipeStrategy ?? 'input'\n });\n }\n // v3 branch — use vendored converter\n return (0,zod_to_json_schema__WEBPACK_IMPORTED_MODULE_1__.zodToJsonSchema)(schema, {\n strictUnions: opts?.strictUnions ?? true,\n pipeStrategy: opts?.pipeStrategy ?? 'input'\n });\n}\nfunction getMethodLiteral(schema) {\n const shape = (0,_zod_compat_js__WEBPACK_IMPORTED_MODULE_0__.getObjectShape)(schema);\n const methodSchema = shape?.method;\n if (!methodSchema) {\n throw new Error('Schema is missing a method literal');\n }\n const value = (0,_zod_compat_js__WEBPACK_IMPORTED_MODULE_0__.getLiteralValue)(methodSchema);\n if (typeof value !== 'string') {\n throw new Error('Schema method literal must be a string');\n }\n return value;\n}\nfunction parseWithCompat(schema, data) {\n const result = (0,_zod_compat_js__WEBPACK_IMPORTED_MODULE_0__.safeParse)(schema, data);\n if (!result.success) {\n throw result.error;\n }\n return result.data;\n}\n//# sourceMappingURL=zod-json-schema-compat.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vc2VydmVyL3pvZC1qc29uLXNjaGVtYS1jb21wYXQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ3NDO0FBQ21EO0FBQ3BDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ087QUFDUCxRQUFRLDBEQUFVO0FBQ2xCO0FBQ0EsZUFBZSxxREFBbUI7QUFDbEM7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsV0FBVyxtRUFBZTtBQUMxQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ087QUFDUCxrQkFBa0IsOERBQWM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsK0RBQWU7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsbUJBQW1CLHlEQUFTO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9kZWxjb250ZXh0cHJvdG9jb2wrc2RrQDEuMjkuMF96b2RAMy4yNS43Ni9ub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9kaXN0L2VzbS9zZXJ2ZXIvem9kLWpzb24tc2NoZW1hLWNvbXBhdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB6b2QtanNvbi1zY2hlbWEtY29tcGF0LnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBKU09OIFNjaGVtYSBjb252ZXJzaW9uIGZvciBib3RoIFpvZCB2MyBhbmQgWm9kIHY0IChNaW5pKVxuLy8gdjMgdXNlcyB5b3VyIHZlbmRvcmVkIGNvbnZlcnRlcjsgdjQgdXNlcyBNaW5pJ3MgdG9KU09OU2NoZW1hXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5pbXBvcnQgKiBhcyB6NG1pbmkgZnJvbSAnem9kL3Y0LW1pbmknO1xuaW1wb3J0IHsgZ2V0T2JqZWN0U2hhcGUsIHNhZmVQYXJzZSwgaXNaNFNjaGVtYSwgZ2V0TGl0ZXJhbFZhbHVlIH0gZnJvbSAnLi96b2QtY29tcGF0LmpzJztcbmltcG9ydCB7IHpvZFRvSnNvblNjaGVtYSB9IGZyb20gJ3pvZC10by1qc29uLXNjaGVtYSc7XG5mdW5jdGlvbiBtYXBNaW5pVGFyZ2V0KHQpIHtcbiAgICBpZiAoIXQpXG4gICAgICAgIHJldHVybiAnZHJhZnQtNyc7XG4gICAgaWYgKHQgPT09ICdqc29uU2NoZW1hNycgfHwgdCA9PT0gJ2RyYWZ0LTcnKVxuICAgICAgICByZXR1cm4gJ2RyYWZ0LTcnO1xuICAgIGlmICh0ID09PSAnanNvblNjaGVtYTIwMTktMDknIHx8IHQgPT09ICdkcmFmdC0yMDIwLTEyJylcbiAgICAgICAgcmV0dXJuICdkcmFmdC0yMDIwLTEyJztcbiAgICByZXR1cm4gJ2RyYWZ0LTcnOyAvLyBmYWxsYmFja1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvblNjaGVtYUNvbXBhdChzY2hlbWEsIG9wdHMpIHtcbiAgICBpZiAoaXNaNFNjaGVtYShzY2hlbWEpKSB7XG4gICAgICAgIC8vIHY0IGJyYW5jaCDigJQgdXNlIE1pbmkncyBidWlsdC1pbiB0b0pTT05TY2hlbWFcbiAgICAgICAgcmV0dXJuIHo0bWluaS50b0pTT05TY2hlbWEoc2NoZW1hLCB7XG4gICAgICAgICAgICB0YXJnZXQ6IG1hcE1pbmlUYXJnZXQob3B0cz8udGFyZ2V0KSxcbiAgICAgICAgICAgIGlvOiBvcHRzPy5waXBlU3RyYXRlZ3kgPz8gJ2lucHV0J1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gdjMgYnJhbmNoIOKAlCB1c2UgdmVuZG9yZWQgY29udmVydGVyXG4gICAgcmV0dXJuIHpvZFRvSnNvblNjaGVtYShzY2hlbWEsIHtcbiAgICAgICAgc3RyaWN0VW5pb25zOiBvcHRzPy5zdHJpY3RVbmlvbnMgPz8gdHJ1ZSxcbiAgICAgICAgcGlwZVN0cmF0ZWd5OiBvcHRzPy5waXBlU3RyYXRlZ3kgPz8gJ2lucHV0J1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGhvZExpdGVyYWwoc2NoZW1hKSB7XG4gICAgY29uc3Qgc2hhcGUgPSBnZXRPYmplY3RTaGFwZShzY2hlbWEpO1xuICAgIGNvbnN0IG1ldGhvZFNjaGVtYSA9IHNoYXBlPy5tZXRob2Q7XG4gICAgaWYgKCFtZXRob2RTY2hlbWEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTY2hlbWEgaXMgbWlzc2luZyBhIG1ldGhvZCBsaXRlcmFsJyk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gZ2V0TGl0ZXJhbFZhbHVlKG1ldGhvZFNjaGVtYSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTY2hlbWEgbWV0aG9kIGxpdGVyYWwgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VXaXRoQ29tcGF0KHNjaGVtYSwgZGF0YSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHNhZmVQYXJzZShzY2hlbWEsIGRhdGEpO1xuICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD16b2QtanNvbi1zY2hlbWEtY29tcGF0LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth-utils.js":
/*!**********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth-utils.js ***!
\**********************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ checkResourceAllowed: () => (/* binding */ checkResourceAllowed),\n/* harmony export */ resourceUrlFromServerUrl: () => (/* binding */ resourceUrlFromServerUrl)\n/* harmony export */ });\n/**\n * Utilities for handling OAuth resource URIs.\n */\n/**\n * Converts a server URL to a resource URL by removing the fragment.\n * RFC 8707 section 2 states that resource URIs \"MUST NOT include a fragment component\".\n * Keeps everything else unchanged (scheme, domain, port, path, query).\n */\nfunction resourceUrlFromServerUrl(url) {\n const resourceURL = typeof url === 'string' ? new URL(url) : new URL(url.href);\n resourceURL.hash = ''; // Remove fragment\n return resourceURL;\n}\n/**\n * Checks if a requested resource URL matches a configured resource URL.\n * A requested resource matches if it has the same scheme, domain, port,\n * and its path starts with the configured resource's path.\n *\n * @param requestedResource The resource URL being requested\n * @param configuredResource The resource URL that has been configured\n * @returns true if the requested resource matches the configured resource, false otherwise\n */\nfunction checkResourceAllowed({ requestedResource, configuredResource }) {\n const requested = typeof requestedResource === 'string' ? new URL(requestedResource) : new URL(requestedResource.href);\n const configured = typeof configuredResource === 'string' ? new URL(configuredResource) : new URL(configuredResource.href);\n // Compare the origin (scheme, domain, and port)\n if (requested.origin !== configured.origin) {\n return false;\n }\n // Handle cases like requested=/foo and configured=/foo/\n if (requested.pathname.length < configured.pathname.length) {\n return false;\n }\n // Check if the requested path starts with the configured path\n // Ensure both paths end with / for proper comparison\n // This ensures that if we have paths like \"/api\" and \"/api/users\",\n // we properly detect that \"/api/users\" is a subpath of \"/api\"\n // By adding a trailing slash if missing, we avoid false positives\n // where paths like \"/api123\" would incorrectly match \"/api\"\n const requestedPath = requested.pathname.endsWith('/') ? requested.pathname : requested.pathname + '/';\n const configuredPath = configured.pathname.endsWith('/') ? configured.pathname : configured.pathname + '/';\n return requestedPath.startsWith(configuredPath);\n}\n//# sourceMappingURL=auth-utils.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vc2hhcmVkL2F1dGgtdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sZ0NBQWdDLHVDQUF1QztBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vc2hhcmVkL2F1dGgtdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVdGlsaXRpZXMgZm9yIGhhbmRsaW5nIE9BdXRoIHJlc291cmNlIFVSSXMuXG4gKi9cbi8qKlxuICogQ29udmVydHMgYSBzZXJ2ZXIgVVJMIHRvIGEgcmVzb3VyY2UgVVJMIGJ5IHJlbW92aW5nIHRoZSBmcmFnbWVudC5cbiAqIFJGQyA4NzA3IHNlY3Rpb24gMiBzdGF0ZXMgdGhhdCByZXNvdXJjZSBVUklzIFwiTVVTVCBOT1QgaW5jbHVkZSBhIGZyYWdtZW50IGNvbXBvbmVudFwiLlxuICogS2VlcHMgZXZlcnl0aGluZyBlbHNlIHVuY2hhbmdlZCAoc2NoZW1lLCBkb21haW4sIHBvcnQsIHBhdGgsIHF1ZXJ5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc291cmNlVXJsRnJvbVNlcnZlclVybCh1cmwpIHtcbiAgICBjb25zdCByZXNvdXJjZVVSTCA9IHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnID8gbmV3IFVSTCh1cmwpIDogbmV3IFVSTCh1cmwuaHJlZik7XG4gICAgcmVzb3VyY2VVUkwuaGFzaCA9ICcnOyAvLyBSZW1vdmUgZnJhZ21lbnRcbiAgICByZXR1cm4gcmVzb3VyY2VVUkw7XG59XG4vKipcbiAqIENoZWNrcyBpZiBhIHJlcXVlc3RlZCByZXNvdXJjZSBVUkwgbWF0Y2hlcyBhIGNvbmZpZ3VyZWQgcmVzb3VyY2UgVVJMLlxuICogQSByZXF1ZXN0ZWQgcmVzb3VyY2UgbWF0Y2hlcyBpZiBpdCBoYXMgdGhlIHNhbWUgc2NoZW1lLCBkb21haW4sIHBvcnQsXG4gKiBhbmQgaXRzIHBhdGggc3RhcnRzIHdpdGggdGhlIGNvbmZpZ3VyZWQgcmVzb3VyY2UncyBwYXRoLlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0ZWRSZXNvdXJjZSBUaGUgcmVzb3VyY2UgVVJMIGJlaW5nIHJlcXVlc3RlZFxuICogQHBhcmFtIGNvbmZpZ3VyZWRSZXNvdXJjZSBUaGUgcmVzb3VyY2UgVVJMIHRoYXQgaGFzIGJlZW4gY29uZmlndXJlZFxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIHJlc291cmNlIG1hdGNoZXMgdGhlIGNvbmZpZ3VyZWQgcmVzb3VyY2UsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXNvdXJjZUFsbG93ZWQoeyByZXF1ZXN0ZWRSZXNvdXJjZSwgY29uZmlndXJlZFJlc291cmNlIH0pIHtcbiAgICBjb25zdCByZXF1ZXN0ZWQgPSB0eXBlb2YgcmVxdWVzdGVkUmVzb3VyY2UgPT09ICdzdHJpbmcnID8gbmV3IFVSTChyZXF1ZXN0ZWRSZXNvdXJjZSkgOiBuZXcgVVJMKHJlcXVlc3RlZFJlc291cmNlLmhyZWYpO1xuICAgIGNvbnN0IGNvbmZpZ3VyZWQgPSB0eXBlb2YgY29uZmlndXJlZFJlc291cmNlID09PSAnc3RyaW5nJyA/IG5ldyBVUkwoY29uZmlndXJlZFJlc291cmNlKSA6IG5ldyBVUkwoY29uZmlndXJlZFJlc291cmNlLmhyZWYpO1xuICAgIC8vIENvbXBhcmUgdGhlIG9yaWdpbiAoc2NoZW1lLCBkb21haW4sIGFuZCBwb3J0KVxuICAgIGlmIChyZXF1ZXN0ZWQub3JpZ2luICE9PSBjb25maWd1cmVkLm9yaWdpbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBjYXNlcyBsaWtlIHJlcXVlc3RlZD0vZm9vIGFuZCBjb25maWd1cmVkPS9mb28vXG4gICAgaWYgKHJlcXVlc3RlZC5wYXRobmFtZS5sZW5ndGggPCBjb25maWd1cmVkLnBhdGhuYW1lLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIENoZWNrIGlmIHRoZSByZXF1ZXN0ZWQgcGF0aCBzdGFydHMgd2l0aCB0aGUgY29uZmlndXJlZCBwYXRoXG4gICAgLy8gRW5zdXJlIGJvdGggcGF0aHMgZW5kIHdpdGggLyBmb3IgcHJvcGVyIGNvbXBhcmlzb25cbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBpZiB3ZSBoYXZlIHBhdGhzIGxpa2UgXCIvYXBpXCIgYW5kIFwiL2FwaS91c2Vyc1wiLFxuICAgIC8vIHdlIHByb3Blcmx5IGRldGVjdCB0aGF0IFwiL2FwaS91c2Vyc1wiIGlzIGEgc3VicGF0aCBvZiBcIi9hcGlcIlxuICAgIC8vIEJ5IGFkZGluZyBhIHRyYWlsaW5nIHNsYXNoIGlmIG1pc3NpbmcsIHdlIGF2b2lkIGZhbHNlIHBvc2l0aXZlc1xuICAgIC8vIHdoZXJlIHBhdGhzIGxpa2UgXCIvYXBpMTIzXCIgd291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggXCIvYXBpXCJcbiAgICBjb25zdCByZXF1ZXN0ZWRQYXRoID0gcmVxdWVzdGVkLnBhdGhuYW1lLmVuZHNXaXRoKCcvJykgPyByZXF1ZXN0ZWQucGF0aG5hbWUgOiByZXF1ZXN0ZWQucGF0aG5hbWUgKyAnLyc7XG4gICAgY29uc3QgY29uZmlndXJlZFBhdGggPSBjb25maWd1cmVkLnBhdGhuYW1lLmVuZHNXaXRoKCcvJykgPyBjb25maWd1cmVkLnBhdGhuYW1lIDogY29uZmlndXJlZC5wYXRobmFtZSArICcvJztcbiAgICByZXR1cm4gcmVxdWVzdGVkUGF0aC5zdGFydHNXaXRoKGNvbmZpZ3VyZWRQYXRoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1dGgtdXRpbHMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth-utils.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js":
/*!****************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js ***!
\****************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ OAuthClientInformationFullSchema: () => (/* binding */ OAuthClientInformationFullSchema),\n/* harmony export */ OAuthClientInformationSchema: () => (/* binding */ OAuthClientInformationSchema),\n/* harmony export */ OAuthClientMetadataSchema: () => (/* binding */ OAuthClientMetadataSchema),\n/* harmony export */ OAuthClientRegistrationErrorSchema: () => (/* binding */ OAuthClientRegistrationErrorSchema),\n/* harmony export */ OAuthErrorResponseSchema: () => (/* binding */ OAuthErrorResponseSchema),\n/* harmony export */ OAuthMetadataSchema: () => (/* binding */ OAuthMetadataSchema),\n/* harmony export */ OAuthProtectedResourceMetadataSchema: () => (/* binding */ OAuthProtectedResourceMetadataSchema),\n/* harmony export */ OAuthTokenRevocationRequestSchema: () => (/* binding */ OAuthTokenRevocationRequestSchema),\n/* harmony export */ OAuthTokensSchema: () => (/* binding */ OAuthTokensSchema),\n/* harmony export */ OpenIdProviderDiscoveryMetadataSchema: () => (/* binding */ OpenIdProviderDiscoveryMetadataSchema),\n/* harmony export */ OpenIdProviderMetadataSchema: () => (/* binding */ OpenIdProviderMetadataSchema),\n/* harmony export */ OptionalSafeUrlSchema: () => (/* binding */ OptionalSafeUrlSchema),\n/* harmony export */ SafeUrlSchema: () => (/* binding */ SafeUrlSchema)\n/* harmony export */ });\n/* harmony import */ var zod_v4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zod/v4 */ \"(rsc)/./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/schemas.js\");\n/* harmony import */ var zod_v4__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zod/v4 */ \"(rsc)/./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/compat.js\");\n/* harmony import */ var zod_v4__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! zod/v4 */ \"(rsc)/./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/core.js\");\n/* harmony import */ var zod_v4__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! zod/v4 */ \"(rsc)/./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/coerce.js\");\n\n/**\n * Reusable URL validation that disallows javascript: scheme\n */\nconst SafeUrlSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.url()\n .superRefine((val, ctx) => {\n if (!URL.canParse(val)) {\n ctx.addIssue({\n code: zod_v4__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.custom,\n message: 'URL must be parseable',\n fatal: true\n });\n return zod_v4__WEBPACK_IMPORTED_MODULE_2__.NEVER;\n }\n})\n .refine(url => {\n const u = new URL(url);\n return u.protocol !== 'javascript:' && u.protocol !== 'data:' && u.protocol !== 'vbscript:';\n}, { message: 'URL cannot use javascript:, data:, or vbscript: scheme' });\n/**\n * RFC 9728 OAuth Protected Resource Metadata\n */\nconst OAuthProtectedResourceMetadataSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({\n resource: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().url(),\n authorization_servers: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(SafeUrlSchema).optional(),\n jwks_uri: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().url().optional(),\n scopes_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n bearer_methods_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n resource_signing_alg_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n resource_name: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n resource_documentation: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n resource_policy_uri: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().url().optional(),\n resource_tos_uri: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().url().optional(),\n tls_client_certificate_bound_access_tokens: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional(),\n authorization_details_types_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n dpop_signing_alg_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n dpop_bound_access_tokens_required: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional()\n});\n/**\n * RFC 8414 OAuth 2.0 Authorization Server Metadata\n */\nconst OAuthMetadataSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({\n issuer: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n authorization_endpoint: SafeUrlSchema,\n token_endpoint: SafeUrlSchema,\n registration_endpoint: SafeUrlSchema.optional(),\n scopes_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n response_types_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()),\n response_modes_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n grant_types_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n token_endpoint_auth_methods_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n token_endpoint_auth_signing_alg_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n service_documentation: SafeUrlSchema.optional(),\n revocation_endpoint: SafeUrlSchema.optional(),\n revocation_endpoint_auth_methods_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n revocation_endpoint_auth_signing_alg_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n introspection_endpoint: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n introspection_endpoint_auth_methods_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n introspection_endpoint_auth_signing_alg_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n code_challenge_methods_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n client_id_metadata_document_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional()\n});\n/**\n * OpenID Connect Discovery 1.0 Provider Metadata\n * see: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata\n */\nconst OpenIdProviderMetadataSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({\n issuer: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n authorization_endpoint: SafeUrlSchema,\n token_endpoint: SafeUrlSchema,\n userinfo_endpoint: SafeUrlSchema.optional(),\n jwks_uri: SafeUrlSchema,\n registration_endpoint: SafeUrlSchema.optional(),\n scopes_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n response_types_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()),\n response_modes_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n grant_types_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n acr_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n subject_types_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()),\n id_token_signing_alg_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()),\n id_token_encryption_alg_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n id_token_encryption_enc_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n userinfo_signing_alg_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n userinfo_encryption_alg_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n userinfo_encryption_enc_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n request_object_signing_alg_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n request_object_encryption_alg_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n request_object_encryption_enc_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n token_endpoint_auth_methods_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n token_endpoint_auth_signing_alg_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n display_values_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n claim_types_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n claims_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n service_documentation: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n claims_locales_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n ui_locales_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n claims_parameter_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional(),\n request_parameter_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional(),\n request_uri_parameter_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional(),\n require_request_uri_registration: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional(),\n op_policy_uri: SafeUrlSchema.optional(),\n op_tos_uri: SafeUrlSchema.optional(),\n client_id_metadata_document_supported: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional()\n});\n/**\n * OpenID Connect Discovery metadata that may include OAuth 2.0 fields\n * This schema represents the real-world scenario where OIDC providers\n * return a mix of OpenID Connect and OAuth 2.0 metadata fields\n */\nconst OpenIdProviderDiscoveryMetadataSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n ...OpenIdProviderMetadataSchema.shape,\n ...OAuthMetadataSchema.pick({\n code_challenge_methods_supported: true\n }).shape\n});\n/**\n * OAuth 2.1 token response\n */\nconst OAuthTokensSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n access_token: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n id_token: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(), // Optional for OAuth 2.1, but necessary in OpenID Connect\n token_type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n expires_in: zod_v4__WEBPACK_IMPORTED_MODULE_3__.number().optional(),\n scope: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n refresh_token: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional()\n})\n .strip();\n/**\n * OAuth 2.1 error response\n */\nconst OAuthErrorResponseSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n error: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n error_description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n error_uri: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional()\n});\n/**\n * Optional version of SafeUrlSchema that allows empty string for retrocompatibility on tos_uri and logo_uri\n */\nconst OptionalSafeUrlSchema = SafeUrlSchema.optional().or(zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('').transform(() => undefined));\n/**\n * RFC 7591 OAuth 2.0 Dynamic Client Registration metadata\n */\nconst OAuthClientMetadataSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n redirect_uris: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(SafeUrlSchema),\n token_endpoint_auth_method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n grant_types: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n response_types: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n client_name: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n client_uri: SafeUrlSchema.optional(),\n logo_uri: OptionalSafeUrlSchema,\n scope: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n contacts: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n tos_uri: OptionalSafeUrlSchema,\n policy_uri: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n jwks_uri: SafeUrlSchema.optional(),\n jwks: zod_v4__WEBPACK_IMPORTED_MODULE_0__.any().optional(),\n software_id: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n software_version: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n software_statement: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional()\n})\n .strip();\n/**\n * RFC 7591 OAuth 2.0 Dynamic Client Registration client information\n */\nconst OAuthClientInformationSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n client_id: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n client_secret: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n client_id_issued_at: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional(),\n client_secret_expires_at: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional()\n})\n .strip();\n/**\n * RFC 7591 OAuth 2.0 Dynamic Client Registration full response (client information plus metadata)\n */\nconst OAuthClientInformationFullSchema = OAuthClientMetadataSchema.merge(OAuthClientInformationSchema);\n/**\n * RFC 7591 OAuth 2.0 Dynamic Client Registration error response\n */\nconst OAuthClientRegistrationErrorSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n error: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n error_description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional()\n})\n .strip();\n/**\n * RFC 7009 OAuth 2.0 Token Revocation request\n */\nconst OAuthTokenRevocationRequestSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n token: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n token_type_hint: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional()\n})\n .strip();\n//# sourceMappingURL=auth.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vc2hhcmVkL2F1dGguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ08sc0JBQXNCLHVDQUNyQjtBQUNSO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnREFBYztBQUNoQztBQUNBO0FBQ0EsU0FBUztBQUNULGVBQWUseUNBQU87QUFDdEI7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxJQUFJLG1FQUFtRTtBQUN4RTtBQUNBO0FBQ0E7QUFDTyw2Q0FBNkMsK0NBQWE7QUFDakUsY0FBYywwQ0FBUTtBQUN0QiwyQkFBMkIseUNBQU87QUFDbEMsY0FBYywwQ0FBUTtBQUN0QixzQkFBc0IseUNBQU8sQ0FBQywwQ0FBUTtBQUN0Qyw4QkFBOEIseUNBQU8sQ0FBQywwQ0FBUTtBQUM5QywyQ0FBMkMseUNBQU8sQ0FBQywwQ0FBUTtBQUMzRCxtQkFBbUIsMENBQVE7QUFDM0IsNEJBQTRCLDBDQUFRO0FBQ3BDLHlCQUF5QiwwQ0FBUTtBQUNqQyxzQkFBc0IsMENBQVE7QUFDOUIsZ0RBQWdELDJDQUFTO0FBQ3pELDJDQUEyQyx5Q0FBTyxDQUFDLDBDQUFRO0FBQzNELHVDQUF1Qyx5Q0FBTyxDQUFDLDBDQUFRO0FBQ3ZELHVDQUF1QywyQ0FBUztBQUNoRCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ08sNEJBQTRCLCtDQUFhO0FBQ2hELFlBQVksMENBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHlDQUFPLENBQUMsMENBQVE7QUFDdEMsOEJBQThCLHlDQUFPLENBQUMsMENBQVE7QUFDOUMsOEJBQThCLHlDQUFPLENBQUMsMENBQVE7QUFDOUMsMkJBQTJCLHlDQUFPLENBQUMsMENBQVE7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O0FBQzlCLHdCQUF3QiwwQ0FBUTtBQUNoQyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDTyxxQ0FBcUMsMENBQ2pDO0FBQ1gsZUFBZSwwQ0FBUTtBQUN2QixtQkFBbUIsMENBQVE7QUFDM0IseUJBQXlCLDBDQUFRO0FBQ2pDLDhCQUE4QiwwQ0FBUTtBQUN0QyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNPLDJDQUEyQywwQ0FDdkM7QUFDWCxXQUFXLDBDQUFRO0FBQ25CLHVCQUF1QiwwQ0FBUTtBQUMvQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDTywwQ0FBMEMsMENBQ3RDO0FBQ1gsV0FBVywwQ0FBUTtBQUNuQixxQkFBcUIsMENBQVE7QUFDN0IsQ0FBQztBQUNEO0FBQ0EiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vc2hhcmVkL2F1dGguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgeiBmcm9tICd6b2QvdjQnO1xuLyoqXG4gKiBSZXVzYWJsZSBVUkwgdmFsaWRhdGlvbiB0aGF0IGRpc2FsbG93cyBqYXZhc2NyaXB0OiBzY2hlbWVcbiAqL1xuZXhwb3J0IGNvbnN0IFNhZmVVcmxTY2hlbWEgPSB6XG4gICAgLnVybCgpXG4gICAgLnN1cGVyUmVmaW5lKCh2YWwsIGN0eCkgPT4ge1xuICAgIGlmICghVVJMLmNhblBhcnNlKHZhbCkpIHtcbiAgICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgICAgIGNvZGU6IHouWm9kSXNzdWVDb2RlLmN1c3RvbSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdVUkwgbXVzdCBiZSBwYXJzZWFibGUnLFxuICAgICAgICAgICAgZmF0YWw6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB6Lk5FVkVSO1xuICAgIH1cbn0pXG4gICAgLnJlZmluZSh1cmwgPT4ge1xuICAgIGNvbnN0IHUgPSBuZXcgVVJMKHVybCk7XG4gICAgcmV0dXJuIHUucHJvdG9jb2wgIT09ICdqYXZhc2NyaXB0OicgJiYgdS5wcm90b2NvbCAhPT0gJ2RhdGE6JyAmJiB1LnByb3RvY29sICE9PSAndmJzY3JpcHQ6Jztcbn0sIHsgbWVzc2FnZTogJ1VSTCBjYW5ub3QgdXNlIGphdmFzY3JpcHQ6LCBkYXRhOiwgb3IgdmJzY3JpcHQ6IHNjaGVtZScgfSk7XG4vKipcbiAqIFJGQyA5NzI4IE9BdXRoIFByb3RlY3RlZCBSZXNvdXJjZSBNZXRhZGF0YVxuICovXG5leHBvcnQgY29uc3QgT0F1dGhQcm90ZWN0ZWRSZXNvdXJjZU1ldGFkYXRhU2NoZW1hID0gei5sb29zZU9iamVjdCh7XG4gICAgcmVzb3VyY2U6IHouc3RyaW5nKCkudXJsKCksXG4gICAgYXV0aG9yaXphdGlvbl9zZXJ2ZXJzOiB6LmFycmF5KFNhZmVVcmxTY2hlbWEpLm9wdGlvbmFsKCksXG4gICAgandrc191cmk6IHouc3RyaW5nKCkudXJsKCkub3B0aW9uYWwoKSxcbiAgICBzY29wZXNfc3VwcG9ydGVkOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgYmVhcmVyX21ldGhvZHNfc3VwcG9ydGVkOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgcmVzb3VyY2Vfc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIHJlc291cmNlX25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICByZXNvdXJjZV9kb2N1bWVudGF0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcmVzb3VyY2VfcG9saWN5X3VyaTogei5zdHJpbmcoKS51cmwoKS5vcHRpb25hbCgpLFxuICAgIHJlc291cmNlX3Rvc191cmk6IHouc3RyaW5nKCkudXJsKCkub3B0aW9uYWwoKSxcbiAgICB0bHNfY2xpZW50X2NlcnRpZmljYXRlX2JvdW5kX2FjY2Vzc190b2tlbnM6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgYXV0aG9yaXphdGlvbl9kZXRhaWxzX3R5cGVzX3N1cHBvcnRlZDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIGRwb3Bfc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIGRwb3BfYm91bmRfYWNjZXNzX3Rva2Vuc19yZXF1aXJlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG4vKipcbiAqIFJGQyA4NDE0IE9BdXRoIDIuMCBBdXRob3JpemF0aW9uIFNlcnZlciBNZXRhZGF0YVxuICovXG5leHBvcnQgY29uc3QgT0F1dGhNZXRhZGF0YVNjaGVtYSA9IHoubG9vc2VPYmplY3Qoe1xuICAgIGlzc3Vlcjogei5zdHJpbmcoKSxcbiAgICBhdXRob3JpemF0aW9uX2VuZHBvaW50OiBTYWZlVXJsU2NoZW1hLFxuICAgIHRva2VuX2VuZHBvaW50OiBTYWZlVXJsU2NoZW1hLFxuICAgIHJlZ2lzdHJhdGlvbl9lbmRwb2ludDogU2FmZVVybFNjaGVtYS5vcHRpb25hbCgpLFxuICAgIHNjb3Blc19zdXBwb3J0ZWQ6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgICByZXNwb25zZV90eXBlc19zdXBwb3J0ZWQ6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgcmVzcG9uc2VfbW9kZXNfc3VwcG9ydGVkOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgZ3JhbnRfdHlwZXNfc3VwcG9ydGVkOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgdG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIHRva2VuX2VuZHBvaW50X2F1dGhfc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIHNlcnZpY2VfZG9jdW1lbnRhdGlvbjogU2FmZVVybFNjaGVtYS5vcHRpb25hbCgpLFxuICAgIHJldm9jYXRpb25fZW5kcG9pbnQ6IFNhZmVVcmxTY2hlbWEub3B0aW9uYWwoKSxcbiAgICByZXZvY2F0aW9uX2VuZHBvaW50X2F1dGhfbWV0aG9kc19zdXBwb3J0ZWQ6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgICByZXZvY2F0aW9uX2VuZHBvaW50X2F1dGhfc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIGludHJvc3BlY3Rpb25fZW5kcG9pbnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBpbnRyb3NwZWN0aW9uX2VuZHBvaW50X2F1dGhfbWV0aG9kc19zdXBwb3J0ZWQ6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgICBpbnRyb3NwZWN0aW9uX2VuZHBvaW50X2F1dGhfc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIGNvZGVfY2hhbGxlbmdlX21ldGhvZHNfc3VwcG9ydGVkOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgY2xpZW50X2lkX21ldGFkYXRhX2RvY3VtZW50X3N1cHBvcnRlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG4vKipcbiAqIE9wZW5JRCBDb25uZWN0IERpc2NvdmVyeSAxLjAgUHJvdmlkZXIgTWV0YWRhdGFcbiAqIHNlZTogaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWRpc2NvdmVyeS0xXzAuaHRtbCNQcm92aWRlck1ldGFkYXRhXG4gKi9cbmV4cG9ydCBjb25zdCBPcGVuSWRQcm92aWRlck1ldGFkYXRhU2NoZW1hID0gei5sb29zZU9iamVjdCh7XG4gICAgaXNzdWVyOiB6LnN0cmluZygpLFxuICAgIGF1dGhvcml6YXRpb25fZW5kcG9pbnQ6IFNhZmVVcmxTY2hlbWEsXG4gICAgdG9rZW5fZW5kcG9pbnQ6IFNhZmVVcmxTY2hlbWEsXG4gICAgdXNlcmluZm9fZW5kcG9pbnQ6IFNhZmVVcmxTY2hlbWEub3B0aW9uYWwoKSxcbiAgICBqd2tzX3VyaTogU2FmZVVybFNjaGVtYSxcbiAgICByZWdpc3RyYXRpb25fZW5kcG9pbnQ6IFNhZmVVcmxTY2hlbWEub3B0aW9uYWwoKSxcbiAgICBzY29wZXNfc3VwcG9ydGVkOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgcmVzcG9uc2VfdHlwZXNfc3VwcG9ydGVkOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIHJlc3BvbnNlX21vZGVzX3N1cHBvcnRlZDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIGdyYW50X3R5cGVzX3N1cHBvcnRlZDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIGFjcl92YWx1ZXNfc3VwcG9ydGVkOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgc3ViamVjdF90eXBlc19zdXBwb3J0ZWQ6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgaWRfdG9rZW5fc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZDogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBpZF90b2tlbl9lbmNyeXB0aW9uX2FsZ192YWx1ZXNfc3VwcG9ydGVkOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgaWRfdG9rZW5fZW5jcnlwdGlvbl9lbmNfdmFsdWVzX3N1cHBvcnRlZDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIHVzZXJpbmZvX3NpZ25pbmdfYWxnX3ZhbHVlc19zdXBwb3J0ZWQ6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgICB1c2VyaW5mb19lbmNyeXB0aW9uX2FsZ192YWx1ZXNfc3VwcG9ydGVkOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgdXNlcmluZm9fZW5jcnlwdGlvbl9lbmNfdmFsdWVzX3N1cHBvcnRlZDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIHJlcXVlc3Rfb2JqZWN0X3NpZ25pbmdfYWxnX3ZhbHVlc19zdXBwb3J0ZWQ6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgICByZXF1ZXN0X29iamVjdF9lbmNyeXB0aW9uX2FsZ192YWx1ZXNfc3VwcG9ydGVkOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgcmVxdWVzdF9vYmplY3RfZW5jcnlwdGlvbl9lbmNfdmFsdWVzX3N1cHBvcnRlZDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIHRva2VuX2VuZHBvaW50X2F1dGhfbWV0aG9kc19zdXBwb3J0ZWQ6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgICB0b2tlbl9lbmRwb2ludF9hdXRoX3NpZ25pbmdfYWxnX3ZhbHVlc19zdXBwb3J0ZWQ6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgICBkaXNwbGF5X3ZhbHVlc19zdXBwb3J0ZWQ6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgICBjbGFpbV90eXBlc19zdXBwb3J0ZWQ6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgICBjbGFpbXNfc3VwcG9ydGVkOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgc2VydmljZV9kb2N1bWVudGF0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY2xhaW1zX2xvY2FsZXNfc3VwcG9ydGVkOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgdWlfbG9jYWxlc19zdXBwb3J0ZWQ6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICByZXF1ZXN0X3BhcmFtZXRlcl9zdXBwb3J0ZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgcmVxdWVzdF91cmlfcGFyYW1ldGVyX3N1cHBvcnRlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICByZXF1aXJlX3JlcXVlc3RfdXJpX3JlZ2lzdHJhdGlvbjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBvcF9wb2xpY3lfdXJpOiBTYWZlVXJsU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgb3BfdG9zX3VyaTogU2FmZVVybFNjaGVtYS5vcHRpb25hbCgpLFxuICAgIGNsaWVudF9pZF9tZXRhZGF0YV9kb2N1bWVudF9zdXBwb3J0ZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKClcbn0pO1xuLyoqXG4gKiBPcGVuSUQgQ29ubmVjdCBEaXNjb3ZlcnkgbWV0YWRhdGEgdGhhdCBtYXkgaW5jbHVkZSBPQXV0aCAyLjAgZmllbGRzXG4gKiBUaGlzIHNjaGVtYSByZXByZXNlbnRzIHRoZSByZWFsLXdvcmxkIHNjZW5hcmlvIHdoZXJlIE9JREMgcHJvdmlkZXJzXG4gKiByZXR1cm4gYSBtaXggb2YgT3BlbklEIENvbm5lY3QgYW5kIE9BdXRoIDIuMCBtZXRhZGF0YSBmaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IE9wZW5JZFByb3ZpZGVyRGlzY292ZXJ5TWV0YWRhdGFTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLi4uT3BlbklkUHJvdmlkZXJNZXRhZGF0YVNjaGVtYS5zaGFwZSxcbiAgICAuLi5PQXV0aE1ldGFkYXRhU2NoZW1hLnBpY2soe1xuICAgICAgICBjb2RlX2NoYWxsZW5nZV9tZXRob2RzX3N1cHBvcnRlZDogdHJ1ZVxuICAgIH0pLnNoYXBlXG59KTtcbi8qKlxuICogT0F1dGggMi4xIHRva2VuIHJlc3BvbnNlXG4gKi9cbmV4cG9ydCBjb25zdCBPQXV0aFRva2Vuc1NjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICBhY2Nlc3NfdG9rZW46IHouc3RyaW5nKCksXG4gICAgaWRfdG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKSwgLy8gT3B0aW9uYWwgZm9yIE9BdXRoIDIuMSwgYnV0IG5lY2Vzc2FyeSBpbiBPcGVuSUQgQ29ubmVjdFxuICAgIHRva2VuX3R5cGU6IHouc3RyaW5nKCksXG4gICAgZXhwaXJlc19pbjogei5jb2VyY2UubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBzY29wZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHJlZnJlc2hfdG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSlcbiAgICAuc3RyaXAoKTtcbi8qKlxuICogT0F1dGggMi4xIGVycm9yIHJlc3BvbnNlXG4gKi9cbmV4cG9ydCBjb25zdCBPQXV0aEVycm9yUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZXJyb3I6IHouc3RyaW5nKCksXG4gICAgZXJyb3JfZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBlcnJvcl91cmk6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG4vKipcbiAqIE9wdGlvbmFsIHZlcnNpb24gb2YgU2FmZVVybFNjaGVtYSB0aGF0IGFsbG93cyBlbXB0eSBzdHJpbmcgZm9yIHJldHJvY29tcGF0aWJpbGl0eSBvbiB0b3NfdXJpIGFuZCBsb2dvX3VyaVxuICovXG5leHBvcnQgY29uc3QgT3B0aW9uYWxTYWZlVXJsU2NoZW1hID0gU2FmZVVybFNjaGVtYS5vcHRpb25hbCgpLm9yKHoubGl0ZXJhbCgnJykudHJhbnNmb3JtKCgpID0+IHVuZGVmaW5lZCkpO1xuLyoqXG4gKiBSRkMgNzU5MSBPQXV0aCAyLjAgRHluYW1pYyBDbGllbnQgUmVnaXN0cmF0aW9uIG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBjb25zdCBPQXV0aENsaWVudE1ldGFkYXRhU2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIHJlZGlyZWN0X3VyaXM6IHouYXJyYXkoU2FmZVVybFNjaGVtYSksXG4gICAgdG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2Q6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBncmFudF90eXBlczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIHJlc3BvbnNlX3R5cGVzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgY2xpZW50X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjbGllbnRfdXJpOiBTYWZlVXJsU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgbG9nb191cmk6IE9wdGlvbmFsU2FmZVVybFNjaGVtYSxcbiAgICBzY29wZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNvbnRhY3RzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgdG9zX3VyaTogT3B0aW9uYWxTYWZlVXJsU2NoZW1hLFxuICAgIHBvbGljeV91cmk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBqd2tzX3VyaTogU2FmZVVybFNjaGVtYS5vcHRpb25hbCgpLFxuICAgIGp3a3M6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgICBzb2Z0d2FyZV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHNvZnR3YXJlX3ZlcnNpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBzb2Z0d2FyZV9zdGF0ZW1lbnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSlcbiAgICAuc3RyaXAoKTtcbi8qKlxuICogUkZDIDc1OTEgT0F1dGggMi4wIER5bmFtaWMgQ2xpZW50IFJlZ2lzdHJhdGlvbiBjbGllbnQgaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IE9BdXRoQ2xpZW50SW5mb3JtYXRpb25TY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgY2xpZW50X2lkOiB6LnN0cmluZygpLFxuICAgIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjbGllbnRfaWRfaXNzdWVkX2F0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgY2xpZW50X3NlY3JldF9leHBpcmVzX2F0OiB6Lm51bWJlcigpLm9wdGlvbmFsKClcbn0pXG4gICAgLnN0cmlwKCk7XG4vKipcbiAqIFJGQyA3NTkxIE9BdXRoIDIuMCBEeW5hbWljIENsaWVudCBSZWdpc3RyYXRpb24gZnVsbCByZXNwb25zZSAoY2xpZW50IGluZm9ybWF0aW9uIHBsdXMgbWV0YWRhdGEpXG4gKi9cbmV4cG9ydCBjb25zdCBPQXV0aENsaWVudEluZm9ybWF0aW9uRnVsbFNjaGVtYSA9IE9BdXRoQ2xpZW50TWV0YWRhdGFTY2hlbWEubWVyZ2UoT0F1dGhDbGllbnRJbmZvcm1hdGlvblNjaGVtYSk7XG4vKipcbiAqIFJGQyA3NTkxIE9BdXRoIDIuMCBEeW5hbWljIENsaWVudCBSZWdpc3RyYXRpb24gZXJyb3IgcmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNvbnN0IE9BdXRoQ2xpZW50UmVnaXN0cmF0aW9uRXJyb3JTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgZXJyb3I6IHouc3RyaW5nKCksXG4gICAgZXJyb3JfZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSlcbiAgICAuc3RyaXAoKTtcbi8qKlxuICogUkZDIDcwMDkgT0F1dGggMi4wIFRva2VuIFJldm9jYXRpb24gcmVxdWVzdFxuICovXG5leHBvcnQgY29uc3QgT0F1dGhUb2tlblJldm9jYXRpb25SZXF1ZXN0U2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIHRva2VuOiB6LnN0cmluZygpLFxuICAgIHRva2VuX3R5cGVfaGludDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KVxuICAgIC5zdHJpcCgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXV0aC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js":
/*!********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js ***!
\********************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DEFAULT_REQUEST_TIMEOUT_MSEC: () => (/* binding */ DEFAULT_REQUEST_TIMEOUT_MSEC),\n/* harmony export */ Protocol: () => (/* binding */ Protocol),\n/* harmony export */ mergeCapabilities: () => (/* binding */ mergeCapabilities)\n/* harmony export */ });\n/* harmony import */ var _server_zod_compat_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../server/zod-compat.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../types.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js\");\n/* harmony import */ var _experimental_tasks_interfaces_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../experimental/tasks/interfaces.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js\");\n/* harmony import */ var _server_zod_json_schema_compat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../server/zod-json-schema-compat.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js\");\n\n\n\n\n/**\n * The default request timeout, in miliseconds.\n */\nconst DEFAULT_REQUEST_TIMEOUT_MSEC = 60000;\n/**\n * Implements MCP protocol framing on top of a pluggable transport, including\n * features like request/response linking, notifications, and progress.\n */\nclass Protocol {\n constructor(_options) {\n this._options = _options;\n this._requestMessageId = 0;\n this._requestHandlers = new Map();\n this._requestHandlerAbortControllers = new Map();\n this._notificationHandlers = new Map();\n this._responseHandlers = new Map();\n this._progressHandlers = new Map();\n this._timeoutInfo = new Map();\n this._pendingDebouncedNotifications = new Set();\n // Maps task IDs to progress tokens to keep handlers alive after CreateTaskResult\n this._taskProgressTokens = new Map();\n this._requestResolvers = new Map();\n this.setNotificationHandler(_types_js__WEBPACK_IMPORTED_MODULE_1__.CancelledNotificationSchema, notification => {\n this._oncancel(notification);\n });\n this.setNotificationHandler(_types_js__WEBPACK_IMPORTED_MODULE_1__.ProgressNotificationSchema, notification => {\n this._onprogress(notification);\n });\n this.setRequestHandler(_types_js__WEBPACK_IMPORTED_MODULE_1__.PingRequestSchema, \n // Automatic pong by default.\n _request => ({}));\n // Install task handlers if TaskStore is provided\n this._taskStore = _options?.taskStore;\n this._taskMessageQueue = _options?.taskMessageQueue;\n if (this._taskStore) {\n this.setRequestHandler(_types_js__WEBPACK_IMPORTED_MODULE_1__.GetTaskRequestSchema, async (request, extra) => {\n const task = await this._taskStore.getTask(request.params.taskId, extra.sessionId);\n if (!task) {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, 'Failed to retrieve task: Task not found');\n }\n // Per spec: tasks/get responses SHALL NOT include related-task metadata\n // as the taskId parameter is the source of truth\n // @ts-expect-error SendResultT cannot contain GetTaskResult, but we include it in our derived types everywhere else\n return {\n ...task\n };\n });\n this.setRequestHandler(_types_js__WEBPACK_IMPORTED_MODULE_1__.GetTaskPayloadRequestSchema, async (request, extra) => {\n const handleTaskResult = async () => {\n const taskId = request.params.taskId;\n // Deliver queued messages\n if (this._taskMessageQueue) {\n let queuedMessage;\n while ((queuedMessage = await this._taskMessageQueue.dequeue(taskId, extra.sessionId))) {\n // Handle response and error messages by routing them to the appropriate resolver\n if (queuedMessage.type === 'response' || queuedMessage.type === 'error') {\n const message = queuedMessage.message;\n const requestId = message.id;\n // Lookup resolver in _requestResolvers map\n const resolver = this._requestResolvers.get(requestId);\n if (resolver) {\n // Remove resolver from map after invocation\n this._requestResolvers.delete(requestId);\n // Invoke resolver with response or error\n if (queuedMessage.type === 'response') {\n resolver(message);\n }\n else {\n // Convert JSONRPCError to McpError\n const errorMessage = message;\n const error = new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(errorMessage.error.code, errorMessage.error.message, errorMessage.error.data);\n resolver(error);\n }\n }\n else {\n // Handle missing resolver gracefully with error logging\n const messageType = queuedMessage.type === 'response' ? 'Response' : 'Error';\n this._onerror(new Error(`${messageType} handler missing for request ${requestId}`));\n }\n // Continue to next message\n continue;\n }\n // Send the message on the response stream by passing the relatedRequestId\n // This tells the transport to write the message to the tasks/result response stream\n await this._transport?.send(queuedMessage.message, { relatedRequestId: extra.requestId });\n }\n }\n // Now check task status\n const task = await this._taskStore.getTask(taskId, extra.sessionId);\n if (!task) {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Task not found: ${taskId}`);\n }\n // Block if task is not terminal (we've already delivered all queued messages above)\n if (!(0,_experimental_tasks_interfaces_js__WEBPACK_IMPORTED_MODULE_2__.isTerminal)(task.status)) {\n // Wait for status change or new messages\n await this._waitForTaskUpdate(taskId, extra.signal);\n // After waking up, recursively call to deliver any new messages or result\n return await handleTaskResult();\n }\n // If task is terminal, return the result\n if ((0,_experimental_tasks_interfaces_js__WEBPACK_IMPORTED_MODULE_2__.isTerminal)(task.status)) {\n const result = await this._taskStore.getTaskResult(taskId, extra.sessionId);\n this._clearTaskQueue(taskId);\n return {\n ...result,\n _meta: {\n ...result._meta,\n [_types_js__WEBPACK_IMPORTED_MODULE_1__.RELATED_TASK_META_KEY]: {\n taskId: taskId\n }\n }\n };\n }\n return await handleTaskResult();\n };\n return await handleTaskResult();\n });\n this.setRequestHandler(_types_js__WEBPACK_IMPORTED_MODULE_1__.ListTasksRequestSchema, async (request, extra) => {\n try {\n const { tasks, nextCursor } = await this._taskStore.listTasks(request.params?.cursor, extra.sessionId);\n // @ts-expect-error SendResultT cannot contain ListTasksResult, but we include it in our derived types everywhere else\n return {\n tasks,\n nextCursor,\n _meta: {}\n };\n }\n catch (error) {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Failed to list tasks: ${error instanceof Error ? error.message : String(error)}`);\n }\n });\n this.setRequestHandler(_types_js__WEBPACK_IMPORTED_MODULE_1__.CancelTaskRequestSchema, async (request, extra) => {\n try {\n // Get the current task to check if it's in a terminal state, in case the implementation is not atomic\n const task = await this._taskStore.getTask(request.params.taskId, extra.sessionId);\n if (!task) {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Task not found: ${request.params.taskId}`);\n }\n // Reject cancellation of terminal tasks\n if ((0,_experimental_tasks_interfaces_js__WEBPACK_IMPORTED_MODULE_2__.isTerminal)(task.status)) {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Cannot cancel task in terminal status: ${task.status}`);\n }\n await this._taskStore.updateTaskStatus(request.params.taskId, 'cancelled', 'Client cancelled task execution.', extra.sessionId);\n this._clearTaskQueue(request.params.taskId);\n const cancelledTask = await this._taskStore.getTask(request.params.taskId, extra.sessionId);\n if (!cancelledTask) {\n // Task was deleted during cancellation (e.g., cleanup happened)\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Task not found after cancellation: ${request.params.taskId}`);\n }\n return {\n _meta: {},\n ...cancelledTask\n };\n }\n catch (error) {\n // Re-throw McpError as-is\n if (error instanceof _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError) {\n throw error;\n }\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidRequest, `Failed to cancel task: ${error instanceof Error ? error.message : String(error)}`);\n }\n });\n }\n }\n async _oncancel(notification) {\n if (!notification.params.requestId) {\n return;\n }\n // Handle request cancellation\n const controller = this._requestHandlerAbortControllers.get(notification.params.requestId);\n controller?.abort(notification.params.reason);\n }\n _setupTimeout(messageId, timeout, maxTotalTimeout, onTimeout, resetTimeoutOnProgress = false) {\n this._timeoutInfo.set(messageId, {\n timeoutId: setTimeout(onTimeout, timeout),\n startTime: Date.now(),\n timeout,\n maxTotalTimeout,\n resetTimeoutOnProgress,\n onTimeout\n });\n }\n _resetTimeout(messageId) {\n const info = this._timeoutInfo.get(messageId);\n if (!info)\n return false;\n const totalElapsed = Date.now() - info.startTime;\n if (info.maxTotalTimeout && totalElapsed >= info.maxTotalTimeout) {\n this._timeoutInfo.delete(messageId);\n throw _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError.fromError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.RequestTimeout, 'Maximum total timeout exceeded', {\n maxTotalTimeout: info.maxTotalTimeout,\n totalElapsed\n });\n }\n clearTimeout(info.timeoutId);\n info.timeoutId = setTimeout(info.onTimeout, info.timeout);\n return true;\n }\n _cleanupTimeout(messageId) {\n const info = this._timeoutInfo.get(messageId);\n if (info) {\n clearTimeout(info.timeoutId);\n this._timeoutInfo.delete(messageId);\n }\n }\n /**\n * Attaches to the given transport, starts it, and starts listening for messages.\n *\n * The Protocol object assumes ownership of the Transport, replacing any callbacks that have already been set, and expects that it is the only user of the Transport instance going forward.\n */\n async connect(transport) {\n if (this._transport) {\n throw new Error('Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.');\n }\n this._transport = transport;\n const _onclose = this.transport?.onclose;\n this._transport.onclose = () => {\n _onclose?.();\n this._onclose();\n };\n const _onerror = this.transport?.onerror;\n this._transport.onerror = (error) => {\n _onerror?.(error);\n this._onerror(error);\n };\n const _onmessage = this._transport?.onmessage;\n this._transport.onmessage = (message, extra) => {\n _onmessage?.(message, extra);\n if ((0,_types_js__WEBPACK_IMPORTED_MODULE_1__.isJSONRPCResultResponse)(message) || (0,_types_js__WEBPACK_IMPORTED_MODULE_1__.isJSONRPCErrorResponse)(message)) {\n this._onresponse(message);\n }\n else if ((0,_types_js__WEBPACK_IMPORTED_MODULE_1__.isJSONRPCRequest)(message)) {\n this._onrequest(message, extra);\n }\n else if ((0,_types_js__WEBPACK_IMPORTED_MODULE_1__.isJSONRPCNotification)(message)) {\n this._onnotification(message);\n }\n else {\n this._onerror(new Error(`Unknown message type: ${JSON.stringify(message)}`));\n }\n };\n await this._transport.start();\n }\n _onclose() {\n const responseHandlers = this._responseHandlers;\n this._responseHandlers = new Map();\n this._progressHandlers.clear();\n this._taskProgressTokens.clear();\n this._pendingDebouncedNotifications.clear();\n for (const info of this._timeoutInfo.values()) {\n clearTimeout(info.timeoutId);\n }\n this._timeoutInfo.clear();\n // Abort all in-flight request handlers so they stop sending messages\n for (const controller of this._requestHandlerAbortControllers.values()) {\n controller.abort();\n }\n this._requestHandlerAbortControllers.clear();\n const error = _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError.fromError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.ConnectionClosed, 'Connection closed');\n this._transport = undefined;\n this.onclose?.();\n for (const handler of responseHandlers.values()) {\n handler(error);\n }\n }\n _onerror(error) {\n this.onerror?.(error);\n }\n _onnotification(notification) {\n const handler = this._notificationHandlers.get(notification.method) ?? this.fallbackNotificationHandler;\n // Ignore notifications not being subscribed to.\n if (handler === undefined) {\n return;\n }\n // Starting with Promise.resolve() puts any synchronous errors into the monad as well.\n Promise.resolve()\n .then(() => handler(notification))\n .catch(error => this._onerror(new Error(`Uncaught error in notification handler: ${error}`)));\n }\n _onrequest(request, extra) {\n const handler = this._requestHandlers.get(request.method) ?? this.fallbackRequestHandler;\n // Capture the current transport at request time to ensure responses go to the correct client\n const capturedTransport = this._transport;\n // Extract taskId from request metadata if present (needed early for method not found case)\n const relatedTaskId = request.params?._meta?.[_types_js__WEBPACK_IMPORTED_MODULE_1__.RELATED_TASK_META_KEY]?.taskId;\n if (handler === undefined) {\n const errorResponse = {\n jsonrpc: '2.0',\n id: request.id,\n error: {\n code: _types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.MethodNotFound,\n message: 'Method not found'\n }\n };\n // Queue or send the error response based on whether this is a task-related request\n if (relatedTaskId && this._taskMessageQueue) {\n this._enqueueTaskMessage(relatedTaskId, {\n type: 'error',\n message: errorResponse,\n timestamp: Date.now()\n }, capturedTransport?.sessionId).catch(error => this._onerror(new Error(`Failed to enqueue error response: ${error}`)));\n }\n else {\n capturedTransport\n ?.send(errorResponse)\n .catch(error => this._onerror(new Error(`Failed to send an error response: ${error}`)));\n }\n return;\n }\n const abortController = new AbortController();\n this._requestHandlerAbortControllers.set(request.id, abortController);\n const taskCreationParams = (0,_types_js__WEBPACK_IMPORTED_MODULE_1__.isTaskAugmentedRequestParams)(request.params) ? request.params.task : undefined;\n const taskStore = this._taskStore ? this.requestTaskStore(request, capturedTransport?.sessionId) : undefined;\n const fullExtra = {\n signal: abortController.signal,\n sessionId: capturedTransport?.sessionId,\n _meta: request.params?._meta,\n sendNotification: async (notification) => {\n if (abortController.signal.aborted)\n return;\n // Include related-task metadata if this request is part of a task\n const notificationOptions = { relatedRequestId: request.id };\n if (relatedTaskId) {\n notificationOptions.relatedTask = { taskId: relatedTaskId };\n }\n await this.notification(notification, notificationOptions);\n },\n sendRequest: async (r, resultSchema, options) => {\n if (abortController.signal.aborted) {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.ConnectionClosed, 'Request was cancelled');\n }\n // Include related-task metadata if this request is part of a task\n const requestOptions = { ...options, relatedRequestId: request.id };\n if (relatedTaskId && !requestOptions.relatedTask) {\n requestOptions.relatedTask = { taskId: relatedTaskId };\n }\n // Set task status to input_required when sending a request within a task context\n // Use the taskId from options (explicit) or fall back to relatedTaskId (inherited)\n const effectiveTaskId = requestOptions.relatedTask?.taskId ?? relatedTaskId;\n if (effectiveTaskId && taskStore) {\n await taskStore.updateTaskStatus(effectiveTaskId, 'input_required');\n }\n return await this.request(r, resultSchema, requestOptions);\n },\n authInfo: extra?.authInfo,\n requestId: request.id,\n requestInfo: extra?.requestInfo,\n taskId: relatedTaskId,\n taskStore: taskStore,\n taskRequestedTtl: taskCreationParams?.ttl,\n closeSSEStream: extra?.closeSSEStream,\n closeStandaloneSSEStream: extra?.closeStandaloneSSEStream\n };\n // Starting with Promise.resolve() puts any synchronous errors into the monad as well.\n Promise.resolve()\n .then(() => {\n // If this request asked for task creation, check capability first\n if (taskCreationParams) {\n // Check if the request method supports task creation\n this.assertTaskHandlerCapability(request.method);\n }\n })\n .then(() => handler(request, fullExtra))\n .then(async (result) => {\n if (abortController.signal.aborted) {\n // Request was cancelled\n return;\n }\n const response = {\n result,\n jsonrpc: '2.0',\n id: request.id\n };\n // Queue or send the response based on whether this is a task-related request\n if (relatedTaskId && this._taskMessageQueue) {\n await this._enqueueTaskMessage(relatedTaskId, {\n type: 'response',\n message: response,\n timestamp: Date.now()\n }, capturedTransport?.sessionId);\n }\n else {\n await capturedTransport?.send(response);\n }\n }, async (error) => {\n if (abortController.signal.aborted) {\n // Request was cancelled\n return;\n }\n const errorResponse = {\n jsonrpc: '2.0',\n id: request.id,\n error: {\n code: Number.isSafeInteger(error['code']) ? error['code'] : _types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InternalError,\n message: error.message ?? 'Internal error',\n ...(error['data'] !== undefined && { data: error['data'] })\n }\n };\n // Queue or send the error response based on whether this is a task-related request\n if (relatedTaskId && this._taskMessageQueue) {\n await this._enqueueTaskMessage(relatedTaskId, {\n type: 'error',\n message: errorResponse,\n timestamp: Date.now()\n }, capturedTransport?.sessionId);\n }\n else {\n await capturedTransport?.send(errorResponse);\n }\n })\n .catch(error => this._onerror(new Error(`Failed to send response: ${error}`)))\n .finally(() => {\n // Only delete if the stored controller is still ours; after close()+connect(),\n // a new connection may have reused the same request ID with a different controller.\n if (this._requestHandlerAbortControllers.get(request.id) === abortController) {\n this._requestHandlerAbortControllers.delete(request.id);\n }\n });\n }\n _onprogress(notification) {\n const { progressToken, ...params } = notification.params;\n const messageId = Number(progressToken);\n const handler = this._progressHandlers.get(messageId);\n if (!handler) {\n this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(notification)}`));\n return;\n }\n const responseHandler = this._responseHandlers.get(messageId);\n const timeoutInfo = this._timeoutInfo.get(messageId);\n if (timeoutInfo && responseHandler && timeoutInfo.resetTimeoutOnProgress) {\n try {\n this._resetTimeout(messageId);\n }\n catch (error) {\n // Clean up if maxTotalTimeout was exceeded\n this._responseHandlers.delete(messageId);\n this._progressHandlers.delete(messageId);\n this._cleanupTimeout(messageId);\n responseHandler(error);\n return;\n }\n }\n handler(params);\n }\n _onresponse(response) {\n const messageId = Number(response.id);\n // Check if this is a response to a queued request\n const resolver = this._requestResolvers.get(messageId);\n if (resolver) {\n this._requestResolvers.delete(messageId);\n if ((0,_types_js__WEBPACK_IMPORTED_MODULE_1__.isJSONRPCResultResponse)(response)) {\n resolver(response);\n }\n else {\n const error = new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(response.error.code, response.error.message, response.error.data);\n resolver(error);\n }\n return;\n }\n const handler = this._responseHandlers.get(messageId);\n if (handler === undefined) {\n this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(response)}`));\n return;\n }\n this._responseHandlers.delete(messageId);\n this._cleanupTimeout(messageId);\n // Keep progress handler alive for CreateTaskResult responses\n let isTaskResponse = false;\n if ((0,_types_js__WEBPACK_IMPORTED_MODULE_1__.isJSONRPCResultResponse)(response) && response.result && typeof response.result === 'object') {\n const result = response.result;\n if (result.task && typeof result.task === 'object') {\n const task = result.task;\n if (typeof task.taskId === 'string') {\n isTaskResponse = true;\n this._taskProgressTokens.set(task.taskId, messageId);\n }\n }\n }\n if (!isTaskResponse) {\n this._progressHandlers.delete(messageId);\n }\n if ((0,_types_js__WEBPACK_IMPORTED_MODULE_1__.isJSONRPCResultResponse)(response)) {\n handler(response);\n }\n else {\n const error = _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError.fromError(response.error.code, response.error.message, response.error.data);\n handler(error);\n }\n }\n get transport() {\n return this._transport;\n }\n /**\n * Closes the connection.\n */\n async close() {\n await this._transport?.close();\n }\n /**\n * Sends a request and returns an AsyncGenerator that yields response messages.\n * The generator is guaranteed to end with either a 'result' or 'error' message.\n *\n * @example\n * ```typescript\n * const stream = protocol.requestStream(request, resultSchema, options);\n * for await (const message of stream) {\n * switch (message.type) {\n * case 'taskCreated':\n * console.log('Task created:', message.task.taskId);\n * break;\n * case 'taskStatus':\n * console.log('Task status:', message.task.status);\n * break;\n * case 'result':\n * console.log('Final result:', message.result);\n * break;\n * case 'error':\n * console.error('Error:', message.error);\n * break;\n * }\n * }\n * ```\n *\n * @experimental Use `client.experimental.tasks.requestStream()` to access this method.\n */\n async *requestStream(request, resultSchema, options) {\n const { task } = options ?? {};\n // For non-task requests, just yield the result\n if (!task) {\n try {\n const result = await this.request(request, resultSchema, options);\n yield { type: 'result', result };\n }\n catch (error) {\n yield {\n type: 'error',\n error: error instanceof _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError ? error : new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InternalError, String(error))\n };\n }\n return;\n }\n // For task-augmented requests, we need to poll for status\n // First, make the request to create the task\n let taskId;\n try {\n // Send the request and get the CreateTaskResult\n const createResult = await this.request(request, _types_js__WEBPACK_IMPORTED_MODULE_1__.CreateTaskResultSchema, options);\n // Extract taskId from the result\n if (createResult.task) {\n taskId = createResult.task.taskId;\n yield { type: 'taskCreated', task: createResult.task };\n }\n else {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InternalError, 'Task creation did not return a task');\n }\n // Poll for task completion\n while (true) {\n // Get current task status\n const task = await this.getTask({ taskId }, options);\n yield { type: 'taskStatus', task };\n // Check if task is terminal\n if ((0,_experimental_tasks_interfaces_js__WEBPACK_IMPORTED_MODULE_2__.isTerminal)(task.status)) {\n if (task.status === 'completed') {\n // Get the final result\n const result = await this.getTaskResult({ taskId }, resultSchema, options);\n yield { type: 'result', result };\n }\n else if (task.status === 'failed') {\n yield {\n type: 'error',\n error: new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InternalError, `Task ${taskId} failed`)\n };\n }\n else if (task.status === 'cancelled') {\n yield {\n type: 'error',\n error: new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InternalError, `Task ${taskId} was cancelled`)\n };\n }\n return;\n }\n // When input_required, call tasks/result to deliver queued messages\n // (elicitation, sampling) via SSE and block until terminal\n if (task.status === 'input_required') {\n const result = await this.getTaskResult({ taskId }, resultSchema, options);\n yield { type: 'result', result };\n return;\n }\n // Wait before polling again\n const pollInterval = task.pollInterval ?? this._options?.defaultTaskPollInterval ?? 1000;\n await new Promise(resolve => setTimeout(resolve, pollInterval));\n // Check if cancelled\n options?.signal?.throwIfAborted();\n }\n }\n catch (error) {\n yield {\n type: 'error',\n error: error instanceof _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError ? error : new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InternalError, String(error))\n };\n }\n }\n /**\n * Sends a request and waits for a response.\n *\n * Do not use this method to emit notifications! Use notification() instead.\n */\n request(request, resultSchema, options) {\n const { relatedRequestId, resumptionToken, onresumptiontoken, task, relatedTask } = options ?? {};\n // Send the request\n return new Promise((resolve, reject) => {\n const earlyReject = (error) => {\n reject(error);\n };\n if (!this._transport) {\n earlyReject(new Error('Not connected'));\n return;\n }\n if (this._options?.enforceStrictCapabilities === true) {\n try {\n this.assertCapabilityForMethod(request.method);\n // If task creation is requested, also check task capabilities\n if (task) {\n this.assertTaskCapability(request.method);\n }\n }\n catch (e) {\n earlyReject(e);\n return;\n }\n }\n options?.signal?.throwIfAborted();\n const messageId = this._requestMessageId++;\n const jsonrpcRequest = {\n ...request,\n jsonrpc: '2.0',\n id: messageId\n };\n if (options?.onprogress) {\n this._progressHandlers.set(messageId, options.onprogress);\n jsonrpcRequest.params = {\n ...request.params,\n _meta: {\n ...(request.params?._meta || {}),\n progressToken: messageId\n }\n };\n }\n // Augment with task creation parameters if provided\n if (task) {\n jsonrpcRequest.params = {\n ...jsonrpcRequest.params,\n task: task\n };\n }\n // Augment with related task metadata if relatedTask is provided\n if (relatedTask) {\n jsonrpcRequest.params = {\n ...jsonrpcRequest.params,\n _meta: {\n ...(jsonrpcRequest.params?._meta || {}),\n [_types_js__WEBPACK_IMPORTED_MODULE_1__.RELATED_TASK_META_KEY]: relatedTask\n }\n };\n }\n const cancel = (reason) => {\n this._responseHandlers.delete(messageId);\n this._progressHandlers.delete(messageId);\n this._cleanupTimeout(messageId);\n this._transport\n ?.send({\n jsonrpc: '2.0',\n method: 'notifications/cancelled',\n params: {\n requestId: messageId,\n reason: String(reason)\n }\n }, { relatedRequestId, resumptionToken, onresumptiontoken })\n .catch(error => this._onerror(new Error(`Failed to send cancellation: ${error}`)));\n // Wrap the reason in an McpError if it isn't already\n const error = reason instanceof _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError ? reason : new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.RequestTimeout, String(reason));\n reject(error);\n };\n this._responseHandlers.set(messageId, response => {\n if (options?.signal?.aborted) {\n return;\n }\n if (response instanceof Error) {\n return reject(response);\n }\n try {\n const parseResult = (0,_server_zod_compat_js__WEBPACK_IMPORTED_MODULE_0__.safeParse)(resultSchema, response.result);\n if (!parseResult.success) {\n // Type guard: if success is false, error is guaranteed to exist\n reject(parseResult.error);\n }\n else {\n resolve(parseResult.data);\n }\n }\n catch (error) {\n reject(error);\n }\n });\n options?.signal?.addEventListener('abort', () => {\n cancel(options?.signal?.reason);\n });\n const timeout = options?.timeout ?? DEFAULT_REQUEST_TIMEOUT_MSEC;\n const timeoutHandler = () => cancel(_types_js__WEBPACK_IMPORTED_MODULE_1__.McpError.fromError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.RequestTimeout, 'Request timed out', { timeout }));\n this._setupTimeout(messageId, timeout, options?.maxTotalTimeout, timeoutHandler, options?.resetTimeoutOnProgress ?? false);\n // Queue request if related to a task\n const relatedTaskId = relatedTask?.taskId;\n if (relatedTaskId) {\n // Store the response resolver for this request so responses can be routed back\n const responseResolver = (response) => {\n const handler = this._responseHandlers.get(messageId);\n if (handler) {\n handler(response);\n }\n else {\n // Log error when resolver is missing, but don't fail\n this._onerror(new Error(`Response handler missing for side-channeled request ${messageId}`));\n }\n };\n this._requestResolvers.set(messageId, responseResolver);\n this._enqueueTaskMessage(relatedTaskId, {\n type: 'request',\n message: jsonrpcRequest,\n timestamp: Date.now()\n }).catch(error => {\n this._cleanupTimeout(messageId);\n reject(error);\n });\n // Don't send through transport - queued messages are delivered via tasks/result only\n // This prevents duplicate delivery for bidirectional transports\n }\n else {\n // No related task - send through transport normally\n this._transport.send(jsonrpcRequest, { relatedRequestId, resumptionToken, onresumptiontoken }).catch(error => {\n this._cleanupTimeout(messageId);\n reject(error);\n });\n }\n });\n }\n /**\n * Gets the current status of a task.\n *\n * @experimental Use `client.experimental.tasks.getTask()` to access this method.\n */\n async getTask(params, options) {\n // @ts-expect-error SendRequestT cannot directly contain GetTaskRequest, but we ensure all type instantiations contain it anyways\n return this.request({ method: 'tasks/get', params }, _types_js__WEBPACK_IMPORTED_MODULE_1__.GetTaskResultSchema, options);\n }\n /**\n * Retrieves the result of a completed task.\n *\n * @experimental Use `client.experimental.tasks.getTaskResult()` to access this method.\n */\n async getTaskResult(params, resultSchema, options) {\n // @ts-expect-error SendRequestT cannot directly contain GetTaskPayloadRequest, but we ensure all type instantiations contain it anyways\n return this.request({ method: 'tasks/result', params }, resultSchema, options);\n }\n /**\n * Lists tasks, optionally starting from a pagination cursor.\n *\n * @experimental Use `client.experimental.tasks.listTasks()` to access this method.\n */\n async listTasks(params, options) {\n // @ts-expect-error SendRequestT cannot directly contain ListTasksRequest, but we ensure all type instantiations contain it anyways\n return this.request({ method: 'tasks/list', params }, _types_js__WEBPACK_IMPORTED_MODULE_1__.ListTasksResultSchema, options);\n }\n /**\n * Cancels a specific task.\n *\n * @experimental Use `client.experimental.tasks.cancelTask()` to access this method.\n */\n async cancelTask(params, options) {\n // @ts-expect-error SendRequestT cannot directly contain CancelTaskRequest, but we ensure all type instantiations contain it anyways\n return this.request({ method: 'tasks/cancel', params }, _types_js__WEBPACK_IMPORTED_MODULE_1__.CancelTaskResultSchema, options);\n }\n /**\n * Emits a notification, which is a one-way message that does not expect a response.\n */\n async notification(notification, options) {\n if (!this._transport) {\n throw new Error('Not connected');\n }\n this.assertNotificationCapability(notification.method);\n // Queue notification if related to a task\n const relatedTaskId = options?.relatedTask?.taskId;\n if (relatedTaskId) {\n // Build the JSONRPC notification with metadata\n const jsonrpcNotification = {\n ...notification,\n jsonrpc: '2.0',\n params: {\n ...notification.params,\n _meta: {\n ...(notification.params?._meta || {}),\n [_types_js__WEBPACK_IMPORTED_MODULE_1__.RELATED_TASK_META_KEY]: options.relatedTask\n }\n }\n };\n await this._enqueueTaskMessage(relatedTaskId, {\n type: 'notification',\n message: jsonrpcNotification,\n timestamp: Date.now()\n });\n // Don't send through transport - queued messages are delivered via tasks/result only\n // This prevents duplicate delivery for bidirectional transports\n return;\n }\n const debouncedMethods = this._options?.debouncedNotificationMethods ?? [];\n // A notification can only be debounced if it's in the list AND it's \"simple\"\n // (i.e., has no parameters and no related request ID or related task that could be lost).\n const canDebounce = debouncedMethods.includes(notification.method) && !notification.params && !options?.relatedRequestId && !options?.relatedTask;\n if (canDebounce) {\n // If a notification of this type is already scheduled, do nothing.\n if (this._pendingDebouncedNotifications.has(notification.method)) {\n return;\n }\n // Mark this notification type as pending.\n this._pendingDebouncedNotifications.add(notification.method);\n // Schedule the actual send to happen in the next microtask.\n // This allows all synchronous calls in the current event loop tick to be coalesced.\n Promise.resolve().then(() => {\n // Un-mark the notification so the next one can be scheduled.\n this._pendingDebouncedNotifications.delete(notification.method);\n // SAFETY CHECK: If the connection was closed while this was pending, abort.\n if (!this._transport) {\n return;\n }\n let jsonrpcNotification = {\n ...notification,\n jsonrpc: '2.0'\n };\n // Augment with related task metadata if relatedTask is provided\n if (options?.relatedTask) {\n jsonrpcNotification = {\n ...jsonrpcNotification,\n params: {\n ...jsonrpcNotification.params,\n _meta: {\n ...(jsonrpcNotification.params?._meta || {}),\n [_types_js__WEBPACK_IMPORTED_MODULE_1__.RELATED_TASK_META_KEY]: options.relatedTask\n }\n }\n };\n }\n // Send the notification, but don't await it here to avoid blocking.\n // Handle potential errors with a .catch().\n this._transport?.send(jsonrpcNotification, options).catch(error => this._onerror(error));\n });\n // Return immediately.\n return;\n }\n let jsonrpcNotification = {\n ...notification,\n jsonrpc: '2.0'\n };\n // Augment with related task metadata if relatedTask is provided\n if (options?.relatedTask) {\n jsonrpcNotification = {\n ...jsonrpcNotification,\n params: {\n ...jsonrpcNotification.params,\n _meta: {\n ...(jsonrpcNotification.params?._meta || {}),\n [_types_js__WEBPACK_IMPORTED_MODULE_1__.RELATED_TASK_META_KEY]: options.relatedTask\n }\n }\n };\n }\n await this._transport.send(jsonrpcNotification, options);\n }\n /**\n * Registers a handler to invoke when this protocol object receives a request with the given method.\n *\n * Note that this will replace any previous request handler for the same method.\n */\n setRequestHandler(requestSchema, handler) {\n const method = (0,_server_zod_json_schema_compat_js__WEBPACK_IMPORTED_MODULE_3__.getMethodLiteral)(requestSchema);\n this.assertRequestHandlerCapability(method);\n this._requestHandlers.set(method, (request, extra) => {\n const parsed = (0,_server_zod_json_schema_compat_js__WEBPACK_IMPORTED_MODULE_3__.parseWithCompat)(requestSchema, request);\n return Promise.resolve(handler(parsed, extra));\n });\n }\n /**\n * Removes the request handler for the given method.\n */\n removeRequestHandler(method) {\n this._requestHandlers.delete(method);\n }\n /**\n * Asserts that a request handler has not already been set for the given method, in preparation for a new one being automatically installed.\n */\n assertCanSetRequestHandler(method) {\n if (this._requestHandlers.has(method)) {\n throw new Error(`A request handler for ${method} already exists, which would be overridden`);\n }\n }\n /**\n * Registers a handler to invoke when this protocol object receives a notification with the given method.\n *\n * Note that this will replace any previous notification handler for the same method.\n */\n setNotificationHandler(notificationSchema, handler) {\n const method = (0,_server_zod_json_schema_compat_js__WEBPACK_IMPORTED_MODULE_3__.getMethodLiteral)(notificationSchema);\n this._notificationHandlers.set(method, notification => {\n const parsed = (0,_server_zod_json_schema_compat_js__WEBPACK_IMPORTED_MODULE_3__.parseWithCompat)(notificationSchema, notification);\n return Promise.resolve(handler(parsed));\n });\n }\n /**\n * Removes the notification handler for the given method.\n */\n removeNotificationHandler(method) {\n this._notificationHandlers.delete(method);\n }\n /**\n * Cleans up the progress handler associated with a task.\n * This should be called when a task reaches a terminal status.\n */\n _cleanupTaskProgressHandler(taskId) {\n const progressToken = this._taskProgressTokens.get(taskId);\n if (progressToken !== undefined) {\n this._progressHandlers.delete(progressToken);\n this._taskProgressTokens.delete(taskId);\n }\n }\n /**\n * Enqueues a task-related message for side-channel delivery via tasks/result.\n * @param taskId The task ID to associate the message with\n * @param message The message to enqueue\n * @param sessionId Optional session ID for binding the operation to a specific session\n * @throws Error if taskStore is not configured or if enqueue fails (e.g., queue overflow)\n *\n * Note: If enqueue fails, it's the TaskMessageQueue implementation's responsibility to handle\n * the error appropriately (e.g., by failing the task, logging, etc.). The Protocol layer\n * simply propagates the error.\n */\n async _enqueueTaskMessage(taskId, message, sessionId) {\n // Task message queues are only used when taskStore is configured\n if (!this._taskStore || !this._taskMessageQueue) {\n throw new Error('Cannot enqueue task message: taskStore and taskMessageQueue are not configured');\n }\n const maxQueueSize = this._options?.maxTaskQueueSize;\n await this._taskMessageQueue.enqueue(taskId, message, sessionId, maxQueueSize);\n }\n /**\n * Clears the message queue for a task and rejects any pending request resolvers.\n * @param taskId The task ID whose queue should be cleared\n * @param sessionId Optional session ID for binding the operation to a specific session\n */\n async _clearTaskQueue(taskId, sessionId) {\n if (this._taskMessageQueue) {\n // Reject any pending request resolvers\n const messages = await this._taskMessageQueue.dequeueAll(taskId, sessionId);\n for (const message of messages) {\n if (message.type === 'request' && (0,_types_js__WEBPACK_IMPORTED_MODULE_1__.isJSONRPCRequest)(message.message)) {\n // Extract request ID from the message\n const requestId = message.message.id;\n const resolver = this._requestResolvers.get(requestId);\n if (resolver) {\n resolver(new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InternalError, 'Task cancelled or completed'));\n this._requestResolvers.delete(requestId);\n }\n else {\n // Log error when resolver is missing during cleanup for better observability\n this._onerror(new Error(`Resolver missing for request ${requestId} during task ${taskId} cleanup`));\n }\n }\n }\n }\n }\n /**\n * Waits for a task update (new messages or status change) with abort signal support.\n * Uses polling to check for updates at the task's configured poll interval.\n * @param taskId The task ID to wait for\n * @param signal Abort signal to cancel the wait\n * @returns Promise that resolves when an update occurs or rejects if aborted\n */\n async _waitForTaskUpdate(taskId, signal) {\n // Get the task's poll interval, falling back to default\n let interval = this._options?.defaultTaskPollInterval ?? 1000;\n try {\n const task = await this._taskStore?.getTask(taskId);\n if (task?.pollInterval) {\n interval = task.pollInterval;\n }\n }\n catch {\n // Use default interval if task lookup fails\n }\n return new Promise((resolve, reject) => {\n if (signal.aborted) {\n reject(new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidRequest, 'Request cancelled'));\n return;\n }\n // Wait for the poll interval, then resolve so caller can check for updates\n const timeoutId = setTimeout(resolve, interval);\n // Clean up timeout and reject if aborted\n signal.addEventListener('abort', () => {\n clearTimeout(timeoutId);\n reject(new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidRequest, 'Request cancelled'));\n }, { once: true });\n });\n }\n requestTaskStore(request, sessionId) {\n const taskStore = this._taskStore;\n if (!taskStore) {\n throw new Error('No task store configured');\n }\n return {\n createTask: async (taskParams) => {\n if (!request) {\n throw new Error('No request provided');\n }\n return await taskStore.createTask(taskParams, request.id, {\n method: request.method,\n params: request.params\n }, sessionId);\n },\n getTask: async (taskId) => {\n const task = await taskStore.getTask(taskId, sessionId);\n if (!task) {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, 'Failed to retrieve task: Task not found');\n }\n return task;\n },\n storeTaskResult: async (taskId, status, result) => {\n await taskStore.storeTaskResult(taskId, status, result, sessionId);\n // Get updated task state and send notification\n const task = await taskStore.getTask(taskId, sessionId);\n if (task) {\n const notification = _types_js__WEBPACK_IMPORTED_MODULE_1__.TaskStatusNotificationSchema.parse({\n method: 'notifications/tasks/status',\n params: task\n });\n await this.notification(notification);\n if ((0,_experimental_tasks_interfaces_js__WEBPACK_IMPORTED_MODULE_2__.isTerminal)(task.status)) {\n this._cleanupTaskProgressHandler(taskId);\n // Don't clear queue here - it will be cleared after delivery via tasks/result\n }\n }\n },\n getTaskResult: taskId => {\n return taskStore.getTaskResult(taskId, sessionId);\n },\n updateTaskStatus: async (taskId, status, statusMessage) => {\n // Check if task exists\n const task = await taskStore.getTask(taskId, sessionId);\n if (!task) {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Task \"${taskId}\" not found - it may have been cleaned up`);\n }\n // Don't allow transitions from terminal states\n if ((0,_experimental_tasks_interfaces_js__WEBPACK_IMPORTED_MODULE_2__.isTerminal)(task.status)) {\n throw new _types_js__WEBPACK_IMPORTED_MODULE_1__.McpError(_types_js__WEBPACK_IMPORTED_MODULE_1__.ErrorCode.InvalidParams, `Cannot update task \"${taskId}\" from terminal status \"${task.status}\" to \"${status}\". Terminal states (completed, failed, cancelled) cannot transition to other states.`);\n }\n await taskStore.updateTaskStatus(taskId, status, statusMessage, sessionId);\n // Get updated task state and send notification\n const updatedTask = await taskStore.getTask(taskId, sessionId);\n if (updatedTask) {\n const notification = _types_js__WEBPACK_IMPORTED_MODULE_1__.TaskStatusNotificationSchema.parse({\n method: 'notifications/tasks/status',\n params: updatedTask\n });\n await this.notification(notification);\n if ((0,_experimental_tasks_interfaces_js__WEBPACK_IMPORTED_MODULE_2__.isTerminal)(updatedTask.status)) {\n this._cleanupTaskProgressHandler(taskId);\n // Don't clear queue here - it will be cleared after delivery via tasks/result\n }\n }\n },\n listTasks: cursor => {\n return taskStore.listTasks(cursor, sessionId);\n }\n };\n }\n}\nfunction isPlainObject(value) {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\nfunction mergeCapabilities(base, additional) {\n const result = { ...base };\n for (const key in additional) {\n const k = key;\n const addValue = additional[k];\n if (addValue === undefined)\n continue;\n const baseValue = result[k];\n if (isPlainObject(baseValue) && isPlainObject(addValue)) {\n result[k] = { ...baseValue, ...addValue };\n }\n else {\n result[k] = addValue;\n }\n }\n return result;\n}\n//# sourceMappingURL=protocol.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vc2hhcmVkL3Byb3RvY29sLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBb0Q7QUFDdWI7QUFDMWE7QUFDdUI7QUFDeEY7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msa0VBQTJCO0FBQy9EO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxpRUFBMEI7QUFDOUQ7QUFDQSxTQUFTO0FBQ1QsK0JBQStCLHdEQUFpQjtBQUNoRDtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQywyREFBb0I7QUFDdkQ7QUFDQTtBQUNBLDhCQUE4QiwrQ0FBUSxDQUFDLGdEQUFTO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLG1DQUFtQyxrRUFBMkI7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsK0NBQVE7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStELGFBQWEsOEJBQThCLFVBQVU7QUFDcEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUZBQWlGLG1DQUFtQztBQUNwSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLCtDQUFRLENBQUMsZ0RBQVMsbUNBQW1DLE9BQU87QUFDOUY7QUFDQTtBQUNBLHlCQUF5Qiw2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U0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QiwrQ0FBUSxDQUFDLGdEQUFTO0FBQ2hEO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxtRUFBNEI7QUFDckU7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLHdCQUF3Qiw2RUFBVTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLCtDQUFRLENBQUMsZ0RBQVMseUJBQXlCLE9BQU87QUFDaEY7QUFDQTtBQUNBLG9CQUFvQiw2RUFBVTtBQUM5Qiw4QkFBOEIsK0NBQVEsQ0FBQyxnREFBUyx1Q0FBdUMsT0FBTywwQkFBMEIsWUFBWSxRQUFRLE9BQU87QUFDbko7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxtRUFBNEI7QUFDckU7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLHdCQUF3Qiw2RUFBVTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0Btb2RlbGNvbnRleHRwcm90b2NvbCtzZGtAMS4yOS4wX3pvZEAzLjI1Ljc2L25vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2Rpc3QvZXNtL3NoYXJlZC9wcm90b2NvbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzYWZlUGFyc2UgfSBmcm9tICcuLi9zZXJ2ZXIvem9kLWNvbXBhdC5qcyc7XG5pbXBvcnQgeyBDYW5jZWxsZWROb3RpZmljYXRpb25TY2hlbWEsIENyZWF0ZVRhc2tSZXN1bHRTY2hlbWEsIEVycm9yQ29kZSwgR2V0VGFza1JlcXVlc3RTY2hlbWEsIEdldFRhc2tSZXN1bHRTY2hlbWEsIEdldFRhc2tQYXlsb2FkUmVxdWVzdFNjaGVtYSwgTGlzdFRhc2tzUmVxdWVzdFNjaGVtYSwgTGlzdFRhc2tzUmVzdWx0U2NoZW1hLCBDYW5jZWxUYXNrUmVxdWVzdFNjaGVtYSwgQ2FuY2VsVGFza1Jlc3VsdFNjaGVtYSwgaXNKU09OUlBDRXJyb3JSZXNwb25zZSwgaXNKU09OUlBDUmVxdWVzdCwgaXNKU09OUlBDUmVzdWx0UmVzcG9uc2UsIGlzSlNPTlJQQ05vdGlmaWNhdGlvbiwgTWNwRXJyb3IsIFBpbmdSZXF1ZXN0U2NoZW1hLCBQcm9ncmVzc05vdGlmaWNhdGlvblNjaGVtYSwgUkVMQVRFRF9UQVNLX01FVEFfS0VZLCBUYXNrU3RhdHVzTm90aWZpY2F0aW9uU2NoZW1hLCBpc1Rhc2tBdWdtZW50ZWRSZXF1ZXN0UGFyYW1zIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNUZXJtaW5hbCB9IGZyb20gJy4uL2V4cGVyaW1lbnRhbC90YXNrcy9pbnRlcmZhY2VzLmpzJztcbmltcG9ydCB7IGdldE1ldGhvZExpdGVyYWwsIHBhcnNlV2l0aENvbXBhdCB9IGZyb20gJy4uL3NlcnZlci96b2QtanNvbi1zY2hlbWEtY29tcGF0LmpzJztcbi8qKlxuICogVGhlIGRlZmF1bHQgcmVxdWVzdCB0aW1lb3V0LCBpbiBtaWxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVRVUVTVF9USU1FT1VUX01TRUMgPSA2MDAwMDtcbi8qKlxuICogSW1wbGVtZW50cyBNQ1AgcHJvdG9jb2wgZnJhbWluZyBvbiB0b3Agb2YgYSBwbHVnZ2FibGUgdHJhbnNwb3J0LCBpbmNsdWRpbmdcbiAqIGZlYXR1cmVzIGxpa2UgcmVxdWVzdC9yZXNwb25zZSBsaW5raW5nLCBub3RpZmljYXRpb25zLCBhbmQgcHJvZ3Jlc3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm90b2NvbCB7XG4gICAgY29uc3RydWN0b3IoX29wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0TWVzc2FnZUlkID0gMDtcbiAgICAgICAgdGhpcy5fcmVxdWVzdEhhbmRsZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9yZXNwb25zZUhhbmRsZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0hhbmRsZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl90aW1lb3V0SW5mbyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIC8vIE1hcHMgdGFzayBJRHMgdG8gcHJvZ3Jlc3MgdG9rZW5zIHRvIGtlZXAgaGFuZGxlcnMgYWxpdmUgYWZ0ZXIgQ3JlYXRlVGFza1Jlc3VsdFxuICAgICAgICB0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcihDYW5jZWxsZWROb3RpZmljYXRpb25TY2hlbWEsIG5vdGlmaWNhdGlvbiA9PiB7XG4gICAgICAgICAgICB0aGlzLl9vbmNhbmNlbChub3RpZmljYXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKFByb2dyZXNzTm90aWZpY2F0aW9uU2NoZW1hLCBub3RpZmljYXRpb24gPT4ge1xuICAgICAgICAgICAgdGhpcy5fb25wcm9ncmVzcyhub3RpZmljYXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihQaW5nUmVxdWVzdFNjaGVtYSwgXG4gICAgICAgIC8vIEF1dG9tYXRpYyBwb25nIGJ5IGRlZmF1bHQuXG4gICAgICAgIF9yZXF1ZXN0ID0+ICh7fSkpO1xuICAgICAgICAvLyBJbnN0YWxsIHRhc2sgaGFuZGxlcnMgaWYgVGFza1N0b3JlIGlzIHByb3ZpZGVkXG4gICAgICAgIHRoaXMuX3Rhc2tTdG9yZSA9IF9vcHRpb25zPy50YXNrU3RvcmU7XG4gICAgICAgIHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUgPSBfb3B0aW9ucz8udGFza01lc3NhZ2VRdWV1ZTtcbiAgICAgICAgaWYgKHRoaXMuX3Rhc2tTdG9yZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihHZXRUYXNrUmVxdWVzdFNjaGVtYSwgYXN5bmMgKHJlcXVlc3QsIGV4dHJhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFzayA9IGF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKHJlcXVlc3QucGFyYW1zLnRhc2tJZCwgZXh0cmEuc2Vzc2lvbklkKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1jcEVycm9yKEVycm9yQ29kZS5JbnZhbGlkUGFyYW1zLCAnRmFpbGVkIHRvIHJldHJpZXZlIHRhc2s6IFRhc2sgbm90IGZvdW5kJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFBlciBzcGVjOiB0YXNrcy9nZXQgcmVzcG9uc2VzIFNIQUxMIE5PVCBpbmNsdWRlIHJlbGF0ZWQtdGFzayBtZXRhZGF0YVxuICAgICAgICAgICAgICAgIC8vIGFzIHRoZSB0YXNrSWQgcGFyYW1ldGVyIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGhcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFNlbmRSZXN1bHRUIGNhbm5vdCBjb250YWluIEdldFRhc2tSZXN1bHQsIGJ1dCB3ZSBpbmNsdWRlIGl0IGluIG91ciBkZXJpdmVkIHR5cGVzIGV2ZXJ5d2hlcmUgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRhc2tcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNldFJlcXVlc3RIYW5kbGVyKEdldFRhc2tQYXlsb2FkUmVxdWVzdFNjaGVtYSwgYXN5bmMgKHJlcXVlc3QsIGV4dHJhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlVGFza1Jlc3VsdCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFza0lkID0gcmVxdWVzdC5wYXJhbXMudGFza0lkO1xuICAgICAgICAgICAgICAgICAgICAvLyBEZWxpdmVyIHF1ZXVlZCBtZXNzYWdlc1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFza01lc3NhZ2VRdWV1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHF1ZXVlZE1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHF1ZXVlZE1lc3NhZ2UgPSBhd2FpdCB0aGlzLl90YXNrTWVzc2FnZVF1ZXVlLmRlcXVldWUodGFza0lkLCBleHRyYS5zZXNzaW9uSWQpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSByZXNwb25zZSBhbmQgZXJyb3IgbWVzc2FnZXMgYnkgcm91dGluZyB0aGVtIHRvIHRoZSBhcHByb3ByaWF0ZSByZXNvbHZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWV1ZWRNZXNzYWdlLnR5cGUgPT09ICdyZXNwb25zZScgfHwgcXVldWVkTWVzc2FnZS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBxdWV1ZWRNZXNzYWdlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IG1lc3NhZ2UuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvb2t1cCByZXNvbHZlciBpbiBfcmVxdWVzdFJlc29sdmVycyBtYXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZXIgPSB0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmdldChyZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSByZXNvbHZlciBmcm9tIG1hcCBhZnRlciBpbnZvY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShyZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52b2tlIHJlc29sdmVyIHdpdGggcmVzcG9uc2Ugb3IgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWV1ZWRNZXNzYWdlLnR5cGUgPT09ICdyZXNwb25zZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlcihtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgSlNPTlJQQ0Vycm9yIHRvIE1jcEVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBNY3BFcnJvcihlcnJvck1lc3NhZ2UuZXJyb3IuY29kZSwgZXJyb3JNZXNzYWdlLmVycm9yLm1lc3NhZ2UsIGVycm9yTWVzc2FnZS5lcnJvci5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbWlzc2luZyByZXNvbHZlciBncmFjZWZ1bGx5IHdpdGggZXJyb3IgbG9nZ2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZVR5cGUgPSBxdWV1ZWRNZXNzYWdlLnR5cGUgPT09ICdyZXNwb25zZScgPyAnUmVzcG9uc2UnIDogJ0Vycm9yJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uZXJyb3IobmV3IEVycm9yKGAke21lc3NhZ2VUeXBlfSBoYW5kbGVyIG1pc3NpbmcgZm9yIHJlcXVlc3QgJHtyZXF1ZXN0SWR9YCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIHRvIG5leHQgbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VuZCB0aGUgbWVzc2FnZSBvbiB0aGUgcmVzcG9uc2Ugc3RyZWFtIGJ5IHBhc3NpbmcgdGhlIHJlbGF0ZWRSZXF1ZXN0SWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRlbGxzIHRoZSB0cmFuc3BvcnQgdG8gd3JpdGUgdGhlIG1lc3NhZ2UgdG8gdGhlIHRhc2tzL3Jlc3VsdCByZXNwb25zZSBzdHJlYW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl90cmFuc3BvcnQ/LnNlbmQocXVldWVkTWVzc2FnZS5tZXNzYWdlLCB7IHJlbGF0ZWRSZXF1ZXN0SWQ6IGV4dHJhLnJlcXVlc3RJZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBOb3cgY2hlY2sgdGFzayBzdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFzayA9IGF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKHRhc2tJZCwgZXh0cmEuc2Vzc2lvbklkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTWNwRXJyb3IoRXJyb3JDb2RlLkludmFsaWRQYXJhbXMsIGBUYXNrIG5vdCBmb3VuZDogJHt0YXNrSWR9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gQmxvY2sgaWYgdGFzayBpcyBub3QgdGVybWluYWwgKHdlJ3ZlIGFscmVhZHkgZGVsaXZlcmVkIGFsbCBxdWV1ZWQgbWVzc2FnZXMgYWJvdmUpXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNUZXJtaW5hbCh0YXNrLnN0YXR1cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHN0YXR1cyBjaGFuZ2Ugb3IgbmV3IG1lc3NhZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93YWl0Rm9yVGFza1VwZGF0ZSh0YXNrSWQsIGV4dHJhLnNpZ25hbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZnRlciB3YWtpbmcgdXAsIHJlY3Vyc2l2ZWx5IGNhbGwgdG8gZGVsaXZlciBhbnkgbmV3IG1lc3NhZ2VzIG9yIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGhhbmRsZVRhc2tSZXN1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0YXNrIGlzIHRlcm1pbmFsLCByZXR1cm4gdGhlIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUZXJtaW5hbCh0YXNrLnN0YXR1cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrUmVzdWx0KHRhc2tJZCwgZXh0cmEuc2Vzc2lvbklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFyVGFza1F1ZXVlKHRhc2tJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWV0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHQuX21ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtSRUxBVEVEX1RBU0tfTUVUQV9LRVldOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrSWQ6IHRhc2tJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgaGFuZGxlVGFza1Jlc3VsdCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGhhbmRsZVRhc2tSZXN1bHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihMaXN0VGFza3NSZXF1ZXN0U2NoZW1hLCBhc3luYyAocmVxdWVzdCwgZXh0cmEpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHRhc2tzLCBuZXh0Q3Vyc29yIH0gPSBhd2FpdCB0aGlzLl90YXNrU3RvcmUubGlzdFRhc2tzKHJlcXVlc3QucGFyYW1zPy5jdXJzb3IsIGV4dHJhLnNlc3Npb25JZCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgU2VuZFJlc3VsdFQgY2Fubm90IGNvbnRhaW4gTGlzdFRhc2tzUmVzdWx0LCBidXQgd2UgaW5jbHVkZSBpdCBpbiBvdXIgZGVyaXZlZCB0eXBlcyBldmVyeXdoZXJlIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEN1cnNvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIF9tZXRhOiB7fVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1jcEVycm9yKEVycm9yQ29kZS5JbnZhbGlkUGFyYW1zLCBgRmFpbGVkIHRvIGxpc3QgdGFza3M6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihDYW5jZWxUYXNrUmVxdWVzdFNjaGVtYSwgYXN5bmMgKHJlcXVlc3QsIGV4dHJhKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHRhc2sgdG8gY2hlY2sgaWYgaXQncyBpbiBhIHRlcm1pbmFsIHN0YXRlLCBpbiBjYXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgYXRvbWljXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBhd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhyZXF1ZXN0LnBhcmFtcy50YXNrSWQsIGV4dHJhLnNlc3Npb25JZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1jcEVycm9yKEVycm9yQ29kZS5JbnZhbGlkUGFyYW1zLCBgVGFzayBub3QgZm91bmQ6ICR7cmVxdWVzdC5wYXJhbXMudGFza0lkfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlamVjdCBjYW5jZWxsYXRpb24gb2YgdGVybWluYWwgdGFza3NcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGVybWluYWwodGFzay5zdGF0dXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTWNwRXJyb3IoRXJyb3JDb2RlLkludmFsaWRQYXJhbXMsIGBDYW5ub3QgY2FuY2VsIHRhc2sgaW4gdGVybWluYWwgc3RhdHVzOiAke3Rhc2suc3RhdHVzfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Rhc2tTdG9yZS51cGRhdGVUYXNrU3RhdHVzKHJlcXVlc3QucGFyYW1zLnRhc2tJZCwgJ2NhbmNlbGxlZCcsICdDbGllbnQgY2FuY2VsbGVkIHRhc2sgZXhlY3V0aW9uLicsIGV4dHJhLnNlc3Npb25JZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFyVGFza1F1ZXVlKHJlcXVlc3QucGFyYW1zLnRhc2tJZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbmNlbGxlZFRhc2sgPSBhd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhyZXF1ZXN0LnBhcmFtcy50YXNrSWQsIGV4dHJhLnNlc3Npb25JZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FuY2VsbGVkVGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFzayB3YXMgZGVsZXRlZCBkdXJpbmcgY2FuY2VsbGF0aW9uIChlLmcuLCBjbGVhbnVwIGhhcHBlbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1jcEVycm9yKEVycm9yQ29kZS5JbnZhbGlkUGFyYW1zLCBgVGFzayBub3QgZm91bmQgYWZ0ZXIgY2FuY2VsbGF0aW9uOiAke3JlcXVlc3QucGFyYW1zLnRhc2tJZH1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX21ldGE6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY2FuY2VsbGVkVGFza1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmUtdGhyb3cgTWNwRXJyb3IgYXMtaXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTWNwRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBNY3BFcnJvcihFcnJvckNvZGUuSW52YWxpZFJlcXVlc3QsIGBGYWlsZWQgdG8gY2FuY2VsIHRhc2s6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIF9vbmNhbmNlbChub3RpZmljYXRpb24pIHtcbiAgICAgICAgaWYgKCFub3RpZmljYXRpb24ucGFyYW1zLnJlcXVlc3RJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSByZXF1ZXN0IGNhbmNlbGxhdGlvblxuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldChub3RpZmljYXRpb24ucGFyYW1zLnJlcXVlc3RJZCk7XG4gICAgICAgIGNvbnRyb2xsZXI/LmFib3J0KG5vdGlmaWNhdGlvbi5wYXJhbXMucmVhc29uKTtcbiAgICB9XG4gICAgX3NldHVwVGltZW91dChtZXNzYWdlSWQsIHRpbWVvdXQsIG1heFRvdGFsVGltZW91dCwgb25UaW1lb3V0LCByZXNldFRpbWVvdXRPblByb2dyZXNzID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fdGltZW91dEluZm8uc2V0KG1lc3NhZ2VJZCwge1xuICAgICAgICAgICAgdGltZW91dElkOiBzZXRUaW1lb3V0KG9uVGltZW91dCwgdGltZW91dCksXG4gICAgICAgICAgICBzdGFydFRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICB0aW1lb3V0LFxuICAgICAgICAgICAgbWF4VG90YWxUaW1lb3V0LFxuICAgICAgICAgICAgcmVzZXRUaW1lb3V0T25Qcm9ncmVzcyxcbiAgICAgICAgICAgIG9uVGltZW91dFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3Jlc2V0VGltZW91dChtZXNzYWdlSWQpIHtcbiAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuX3RpbWVvdXRJbmZvLmdldChtZXNzYWdlSWQpO1xuICAgICAgICBpZiAoIWluZm8pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHRvdGFsRWxhcHNlZCA9IERhdGUubm93KCkgLSBpbmZvLnN0YXJ0VGltZTtcbiAgICAgICAgaWYgKGluZm8ubWF4VG90YWxUaW1lb3V0ICYmIHRvdGFsRWxhcHNlZCA+PSBpbmZvLm1heFRvdGFsVGltZW91dCkge1xuICAgICAgICAgICAgdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKG1lc3NhZ2VJZCk7XG4gICAgICAgICAgICB0aHJvdyBNY3BFcnJvci5mcm9tRXJyb3IoRXJyb3JDb2RlLlJlcXVlc3RUaW1lb3V0LCAnTWF4aW11bSB0b3RhbCB0aW1lb3V0IGV4Y2VlZGVkJywge1xuICAgICAgICAgICAgICAgIG1heFRvdGFsVGltZW91dDogaW5mby5tYXhUb3RhbFRpbWVvdXQsXG4gICAgICAgICAgICAgICAgdG90YWxFbGFwc2VkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjbGVhclRpbWVvdXQoaW5mby50aW1lb3V0SWQpO1xuICAgICAgICBpbmZvLnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoaW5mby5vblRpbWVvdXQsIGluZm8udGltZW91dCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBfY2xlYW51cFRpbWVvdXQobWVzc2FnZUlkKSB7XG4gICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLl90aW1lb3V0SW5mby5nZXQobWVzc2FnZUlkKTtcbiAgICAgICAgaWYgKGluZm8pIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChpbmZvLnRpbWVvdXRJZCk7XG4gICAgICAgICAgICB0aGlzLl90aW1lb3V0SW5mby5kZWxldGUobWVzc2FnZUlkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdHRhY2hlcyB0byB0aGUgZ2l2ZW4gdHJhbnNwb3J0LCBzdGFydHMgaXQsIGFuZCBzdGFydHMgbGlzdGVuaW5nIGZvciBtZXNzYWdlcy5cbiAgICAgKlxuICAgICAqIFRoZSBQcm90b2NvbCBvYmplY3QgYXNzdW1lcyBvd25lcnNoaXAgb2YgdGhlIFRyYW5zcG9ydCwgcmVwbGFjaW5nIGFueSBjYWxsYmFja3MgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBzZXQsIGFuZCBleHBlY3RzIHRoYXQgaXQgaXMgdGhlIG9ubHkgdXNlciBvZiB0aGUgVHJhbnNwb3J0IGluc3RhbmNlIGdvaW5nIGZvcndhcmQuXG4gICAgICovXG4gICAgYXN5bmMgY29ubmVjdCh0cmFuc3BvcnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RyYW5zcG9ydCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbHJlYWR5IGNvbm5lY3RlZCB0byBhIHRyYW5zcG9ydC4gQ2FsbCBjbG9zZSgpIGJlZm9yZSBjb25uZWN0aW5nIHRvIGEgbmV3IHRyYW5zcG9ydCwgb3IgdXNlIGEgc2VwYXJhdGUgUHJvdG9jb2wgaW5zdGFuY2UgcGVyIGNvbm5lY3Rpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0O1xuICAgICAgICBjb25zdCBfb25jbG9zZSA9IHRoaXMudHJhbnNwb3J0Py5vbmNsb3NlO1xuICAgICAgICB0aGlzLl90cmFuc3BvcnQub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICAgIF9vbmNsb3NlPy4oKTtcbiAgICAgICAgICAgIHRoaXMuX29uY2xvc2UoKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgX29uZXJyb3IgPSB0aGlzLnRyYW5zcG9ydD8ub25lcnJvcjtcbiAgICAgICAgdGhpcy5fdHJhbnNwb3J0Lm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIF9vbmVycm9yPy4oZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5fb25lcnJvcihlcnJvcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IF9vbm1lc3NhZ2UgPSB0aGlzLl90cmFuc3BvcnQ/Lm9ubWVzc2FnZTtcbiAgICAgICAgdGhpcy5fdHJhbnNwb3J0Lm9ubWVzc2FnZSA9IChtZXNzYWdlLCBleHRyYSkgPT4ge1xuICAgICAgICAgICAgX29ubWVzc2FnZT8uKG1lc3NhZ2UsIGV4dHJhKTtcbiAgICAgICAgICAgIGlmIChpc0pTT05SUENSZXN1bHRSZXNwb25zZShtZXNzYWdlKSB8fCBpc0pTT05SUENFcnJvclJlc3BvbnNlKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25yZXNwb25zZShtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzSlNPTlJQQ1JlcXVlc3QobWVzc2FnZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbnJlcXVlc3QobWVzc2FnZSwgZXh0cmEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNKU09OUlBDTm90aWZpY2F0aW9uKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25ub3RpZmljYXRpb24obWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgVW5rbm93biBtZXNzYWdlIHR5cGU6ICR7SlNPTi5zdHJpbmdpZnkobWVzc2FnZSl9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB0aGlzLl90cmFuc3BvcnQuc3RhcnQoKTtcbiAgICB9XG4gICAgX29uY2xvc2UoKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlSGFuZGxlcnMgPSB0aGlzLl9yZXNwb25zZUhhbmRsZXJzO1xuICAgICAgICB0aGlzLl9yZXNwb25zZUhhbmRsZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5jbGVhcigpO1xuICAgICAgICB0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5jbGVhcigpO1xuICAgICAgICBmb3IgKGNvbnN0IGluZm8gb2YgdGhpcy5fdGltZW91dEluZm8udmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChpbmZvLnRpbWVvdXRJZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGltZW91dEluZm8uY2xlYXIoKTtcbiAgICAgICAgLy8gQWJvcnQgYWxsIGluLWZsaWdodCByZXF1ZXN0IGhhbmRsZXJzIHNvIHRoZXkgc3RvcCBzZW5kaW5nIG1lc3NhZ2VzXG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbGxlciBvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuY2xlYXIoKTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBNY3BFcnJvci5mcm9tRXJyb3IoRXJyb3JDb2RlLkNvbm5lY3Rpb25DbG9zZWQsICdDb25uZWN0aW9uIGNsb3NlZCcpO1xuICAgICAgICB0aGlzLl90cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMub25jbG9zZT8uKCk7XG4gICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiByZXNwb25zZUhhbmRsZXJzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBoYW5kbGVyKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfb25lcnJvcihlcnJvcikge1xuICAgICAgICB0aGlzLm9uZXJyb3I/LihlcnJvcik7XG4gICAgfVxuICAgIF9vbm5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLmdldChub3RpZmljYXRpb24ubWV0aG9kKSA/PyB0aGlzLmZhbGxiYWNrTm90aWZpY2F0aW9uSGFuZGxlcjtcbiAgICAgICAgLy8gSWdub3JlIG5vdGlmaWNhdGlvbnMgbm90IGJlaW5nIHN1YnNjcmliZWQgdG8uXG4gICAgICAgIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdGFydGluZyB3aXRoIFByb21pc2UucmVzb2x2ZSgpIHB1dHMgYW55IHN5bmNocm9ub3VzIGVycm9ycyBpbnRvIHRoZSBtb25hZCBhcyB3ZWxsLlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gaGFuZGxlcihub3RpZmljYXRpb24pKVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmNhdWdodCBlcnJvciBpbiBub3RpZmljYXRpb24gaGFuZGxlcjogJHtlcnJvcn1gKSkpO1xuICAgIH1cbiAgICBfb25yZXF1ZXN0KHJlcXVlc3QsIGV4dHJhKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZ2V0KHJlcXVlc3QubWV0aG9kKSA/PyB0aGlzLmZhbGxiYWNrUmVxdWVzdEhhbmRsZXI7XG4gICAgICAgIC8vIENhcHR1cmUgdGhlIGN1cnJlbnQgdHJhbnNwb3J0IGF0IHJlcXVlc3QgdGltZSB0byBlbnN1cmUgcmVzcG9uc2VzIGdvIHRvIHRoZSBjb3JyZWN0IGNsaWVudFxuICAgICAgICBjb25zdCBjYXB0dXJlZFRyYW5zcG9ydCA9IHRoaXMuX3RyYW5zcG9ydDtcbiAgICAgICAgLy8gRXh0cmFjdCB0YXNrSWQgZnJvbSByZXF1ZXN0IG1ldGFkYXRhIGlmIHByZXNlbnQgKG5lZWRlZCBlYXJseSBmb3IgbWV0aG9kIG5vdCBmb3VuZCBjYXNlKVxuICAgICAgICBjb25zdCByZWxhdGVkVGFza0lkID0gcmVxdWVzdC5wYXJhbXM/Ll9tZXRhPy5bUkVMQVRFRF9UQVNLX01FVEFfS0VZXT8udGFza0lkO1xuICAgICAgICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgICAgICAgICAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IEVycm9yQ29kZS5NZXRob2ROb3RGb3VuZCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ01ldGhvZCBub3QgZm91bmQnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFF1ZXVlIG9yIHNlbmQgdGhlIGVycm9yIHJlc3BvbnNlIGJhc2VkIG9uIHdoZXRoZXIgdGhpcyBpcyBhIHRhc2stcmVsYXRlZCByZXF1ZXN0XG4gICAgICAgICAgICBpZiAocmVsYXRlZFRhc2tJZCAmJiB0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHJlbGF0ZWRUYXNrSWQsIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JSZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpXG4gICAgICAgICAgICAgICAgfSwgY2FwdHVyZWRUcmFuc3BvcnQ/LnNlc3Npb25JZCkuY2F0Y2goZXJyb3IgPT4gdGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBlbnF1ZXVlIGVycm9yIHJlc3BvbnNlOiAke2Vycm9yfWApKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYXB0dXJlZFRyYW5zcG9ydFxuICAgICAgICAgICAgICAgICAgICA/LnNlbmQoZXJyb3JSZXNwb25zZSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBhbiBlcnJvciByZXNwb25zZTogJHtlcnJvcn1gKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnNldChyZXF1ZXN0LmlkLCBhYm9ydENvbnRyb2xsZXIpO1xuICAgICAgICBjb25zdCB0YXNrQ3JlYXRpb25QYXJhbXMgPSBpc1Rhc2tBdWdtZW50ZWRSZXF1ZXN0UGFyYW1zKHJlcXVlc3QucGFyYW1zKSA/IHJlcXVlc3QucGFyYW1zLnRhc2sgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHRhc2tTdG9yZSA9IHRoaXMuX3Rhc2tTdG9yZSA/IHRoaXMucmVxdWVzdFRhc2tTdG9yZShyZXF1ZXN0LCBjYXB0dXJlZFRyYW5zcG9ydD8uc2Vzc2lvbklkKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZnVsbEV4dHJhID0ge1xuICAgICAgICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgICAgc2Vzc2lvbklkOiBjYXB0dXJlZFRyYW5zcG9ydD8uc2Vzc2lvbklkLFxuICAgICAgICAgICAgX21ldGE6IHJlcXVlc3QucGFyYW1zPy5fbWV0YSxcbiAgICAgICAgICAgIHNlbmROb3RpZmljYXRpb246IGFzeW5jIChub3RpZmljYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgLy8gSW5jbHVkZSByZWxhdGVkLXRhc2sgbWV0YWRhdGEgaWYgdGhpcyByZXF1ZXN0IGlzIHBhcnQgb2YgYSB0YXNrXG4gICAgICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uT3B0aW9ucyA9IHsgcmVsYXRlZFJlcXVlc3RJZDogcmVxdWVzdC5pZCB9O1xuICAgICAgICAgICAgICAgIGlmIChyZWxhdGVkVGFza0lkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbk9wdGlvbnMucmVsYXRlZFRhc2sgPSB7IHRhc2tJZDogcmVsYXRlZFRhc2tJZCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbmRSZXF1ZXN0OiBhc3luYyAociwgcmVzdWx0U2NoZW1hLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTWNwRXJyb3IoRXJyb3JDb2RlLkNvbm5lY3Rpb25DbG9zZWQsICdSZXF1ZXN0IHdhcyBjYW5jZWxsZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSW5jbHVkZSByZWxhdGVkLXRhc2sgbWV0YWRhdGEgaWYgdGhpcyByZXF1ZXN0IGlzIHBhcnQgb2YgYSB0YXNrXG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIHJlbGF0ZWRSZXF1ZXN0SWQ6IHJlcXVlc3QuaWQgfTtcbiAgICAgICAgICAgICAgICBpZiAocmVsYXRlZFRhc2tJZCAmJiAhcmVxdWVzdE9wdGlvbnMucmVsYXRlZFRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMucmVsYXRlZFRhc2sgPSB7IHRhc2tJZDogcmVsYXRlZFRhc2tJZCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTZXQgdGFzayBzdGF0dXMgdG8gaW5wdXRfcmVxdWlyZWQgd2hlbiBzZW5kaW5nIGEgcmVxdWVzdCB3aXRoaW4gYSB0YXNrIGNvbnRleHRcbiAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHRhc2tJZCBmcm9tIG9wdGlvbnMgKGV4cGxpY2l0KSBvciBmYWxsIGJhY2sgdG8gcmVsYXRlZFRhc2tJZCAoaW5oZXJpdGVkKVxuICAgICAgICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZVRhc2tJZCA9IHJlcXVlc3RPcHRpb25zLnJlbGF0ZWRUYXNrPy50YXNrSWQgPz8gcmVsYXRlZFRhc2tJZDtcbiAgICAgICAgICAgICAgICBpZiAoZWZmZWN0aXZlVGFza0lkICYmIHRhc2tTdG9yZSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0YXNrU3RvcmUudXBkYXRlVGFza1N0YXR1cyhlZmZlY3RpdmVUYXNrSWQsICdpbnB1dF9yZXF1aXJlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHIsIHJlc3VsdFNjaGVtYSwgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF1dGhJbmZvOiBleHRyYT8uYXV0aEluZm8sXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3QuaWQsXG4gICAgICAgICAgICByZXF1ZXN0SW5mbzogZXh0cmE/LnJlcXVlc3RJbmZvLFxuICAgICAgICAgICAgdGFza0lkOiByZWxhdGVkVGFza0lkLFxuICAgICAgICAgICAgdGFza1N0b3JlOiB0YXNrU3RvcmUsXG4gICAgICAgICAgICB0YXNrUmVxdWVzdGVkVHRsOiB0YXNrQ3JlYXRpb25QYXJhbXM/LnR0bCxcbiAgICAgICAgICAgIGNsb3NlU1NFU3RyZWFtOiBleHRyYT8uY2xvc2VTU0VTdHJlYW0sXG4gICAgICAgICAgICBjbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW06IGV4dHJhPy5jbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gU3RhcnRpbmcgd2l0aCBQcm9taXNlLnJlc29sdmUoKSBwdXRzIGFueSBzeW5jaHJvbm91cyBlcnJvcnMgaW50byB0aGUgbW9uYWQgYXMgd2VsbC5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgcmVxdWVzdCBhc2tlZCBmb3IgdGFzayBjcmVhdGlvbiwgY2hlY2sgY2FwYWJpbGl0eSBmaXJzdFxuICAgICAgICAgICAgaWYgKHRhc2tDcmVhdGlvblBhcmFtcykge1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXF1ZXN0IG1ldGhvZCBzdXBwb3J0cyB0YXNrIGNyZWF0aW9uXG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkocmVxdWVzdC5tZXRob2QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gaGFuZGxlcihyZXF1ZXN0LCBmdWxsRXh0cmEpKVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIC8vIFJlcXVlc3Qgd2FzIGNhbmNlbGxlZFxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICBqc29ucnBjOiAnMi4wJyxcbiAgICAgICAgICAgICAgICBpZDogcmVxdWVzdC5pZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFF1ZXVlIG9yIHNlbmQgdGhlIHJlc3BvbnNlIGJhc2VkIG9uIHdoZXRoZXIgdGhpcyBpcyBhIHRhc2stcmVsYXRlZCByZXF1ZXN0XG4gICAgICAgICAgICBpZiAocmVsYXRlZFRhc2tJZCAmJiB0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHJlbGF0ZWRUYXNrSWQsIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuICAgICAgICAgICAgICAgIH0sIGNhcHR1cmVkVHJhbnNwb3J0Py5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgY2FwdHVyZWRUcmFuc3BvcnQ/LnNlbmQocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXF1ZXN0IHdhcyBjYW5jZWxsZWRcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgICAgICAgICAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IE51bWJlci5pc1NhZmVJbnRlZ2VyKGVycm9yWydjb2RlJ10pID8gZXJyb3JbJ2NvZGUnXSA6IEVycm9yQ29kZS5JbnRlcm5hbEVycm9yLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlID8/ICdJbnRlcm5hbCBlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIC4uLihlcnJvclsnZGF0YSddICE9PSB1bmRlZmluZWQgJiYgeyBkYXRhOiBlcnJvclsnZGF0YSddIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFF1ZXVlIG9yIHNlbmQgdGhlIGVycm9yIHJlc3BvbnNlIGJhc2VkIG9uIHdoZXRoZXIgdGhpcyBpcyBhIHRhc2stcmVsYXRlZCByZXF1ZXN0XG4gICAgICAgICAgICBpZiAocmVsYXRlZFRhc2tJZCAmJiB0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHJlbGF0ZWRUYXNrSWQsIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JSZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpXG4gICAgICAgICAgICAgICAgfSwgY2FwdHVyZWRUcmFuc3BvcnQ/LnNlc3Npb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjYXB0dXJlZFRyYW5zcG9ydD8uc2VuZChlcnJvclJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgcmVzcG9uc2U6ICR7ZXJyb3J9YCkpKVxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgLy8gT25seSBkZWxldGUgaWYgdGhlIHN0b3JlZCBjb250cm9sbGVyIGlzIHN0aWxsIG91cnM7IGFmdGVyIGNsb3NlKCkrY29ubmVjdCgpLFxuICAgICAgICAgICAgLy8gYSBuZXcgY29ubmVjdGlvbiBtYXkgaGF2ZSByZXVzZWQgdGhlIHNhbWUgcmVxdWVzdCBJRCB3aXRoIGEgZGlmZmVyZW50IGNvbnRyb2xsZXIuXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldChyZXF1ZXN0LmlkKSA9PT0gYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmRlbGV0ZShyZXF1ZXN0LmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9vbnByb2dyZXNzKG5vdGlmaWNhdGlvbikge1xuICAgICAgICBjb25zdCB7IHByb2dyZXNzVG9rZW4sIC4uLnBhcmFtcyB9ID0gbm90aWZpY2F0aW9uLnBhcmFtcztcbiAgICAgICAgY29uc3QgbWVzc2FnZUlkID0gTnVtYmVyKHByb2dyZXNzVG9rZW4pO1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5nZXQobWVzc2FnZUlkKTtcbiAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVjZWl2ZWQgYSBwcm9ncmVzcyBub3RpZmljYXRpb24gZm9yIGFuIHVua25vd24gdG9rZW46ICR7SlNPTi5zdHJpbmdpZnkobm90aWZpY2F0aW9uKX1gKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2VIYW5kbGVyID0gdGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQobWVzc2FnZUlkKTtcbiAgICAgICAgY29uc3QgdGltZW91dEluZm8gPSB0aGlzLl90aW1lb3V0SW5mby5nZXQobWVzc2FnZUlkKTtcbiAgICAgICAgaWYgKHRpbWVvdXRJbmZvICYmIHJlc3BvbnNlSGFuZGxlciAmJiB0aW1lb3V0SW5mby5yZXNldFRpbWVvdXRPblByb2dyZXNzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0VGltZW91dChtZXNzYWdlSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xlYW4gdXAgaWYgbWF4VG90YWxUaW1lb3V0IHdhcyBleGNlZWRlZFxuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKG1lc3NhZ2VJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobWVzc2FnZUlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGVhbnVwVGltZW91dChtZXNzYWdlSWQpO1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlSGFuZGxlcihlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGhhbmRsZXIocGFyYW1zKTtcbiAgICB9XG4gICAgX29ucmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZUlkID0gTnVtYmVyKHJlc3BvbnNlLmlkKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlc3BvbnNlIHRvIGEgcXVldWVkIHJlcXVlc3RcbiAgICAgICAgY29uc3QgcmVzb2x2ZXIgPSB0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmdldChtZXNzYWdlSWQpO1xuICAgICAgICBpZiAocmVzb2x2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZGVsZXRlKG1lc3NhZ2VJZCk7XG4gICAgICAgICAgICBpZiAoaXNKU09OUlBDUmVzdWx0UmVzcG9uc2UocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZXIocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgTWNwRXJyb3IocmVzcG9uc2UuZXJyb3IuY29kZSwgcmVzcG9uc2UuZXJyb3IubWVzc2FnZSwgcmVzcG9uc2UuZXJyb3IuZGF0YSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZXIoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChtZXNzYWdlSWQpO1xuICAgICAgICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVjZWl2ZWQgYSByZXNwb25zZSBmb3IgYW4gdW5rbm93biBtZXNzYWdlIElEOiAke0pTT04uc3RyaW5naWZ5KHJlc3BvbnNlKX1gKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUobWVzc2FnZUlkKTtcbiAgICAgICAgdGhpcy5fY2xlYW51cFRpbWVvdXQobWVzc2FnZUlkKTtcbiAgICAgICAgLy8gS2VlcCBwcm9ncmVzcyBoYW5kbGVyIGFsaXZlIGZvciBDcmVhdGVUYXNrUmVzdWx0IHJlc3BvbnNlc1xuICAgICAgICBsZXQgaXNUYXNrUmVzcG9uc2UgPSBmYWxzZTtcbiAgICAgICAgaWYgKGlzSlNPTlJQQ1Jlc3VsdFJlc3BvbnNlKHJlc3BvbnNlKSAmJiByZXNwb25zZS5yZXN1bHQgJiYgdHlwZW9mIHJlc3BvbnNlLnJlc3VsdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcbiAgICAgICAgICAgIGlmIChyZXN1bHQudGFzayAmJiB0eXBlb2YgcmVzdWx0LnRhc2sgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFzayA9IHJlc3VsdC50YXNrO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFzay50YXNrSWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzVGFza1Jlc3BvbnNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLnNldCh0YXNrLnRhc2tJZCwgbWVzc2FnZUlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1Rhc2tSZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobWVzc2FnZUlkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNKU09OUlBDUmVzdWx0UmVzcG9uc2UocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICBoYW5kbGVyKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gTWNwRXJyb3IuZnJvbUVycm9yKHJlc3BvbnNlLmVycm9yLmNvZGUsIHJlc3BvbnNlLmVycm9yLm1lc3NhZ2UsIHJlc3BvbnNlLmVycm9yLmRhdGEpO1xuICAgICAgICAgICAgaGFuZGxlcihlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHRyYW5zcG9ydCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBjb25uZWN0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLl90cmFuc3BvcnQ/LmNsb3NlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmRzIGEgcmVxdWVzdCBhbmQgcmV0dXJucyBhbiBBc3luY0dlbmVyYXRvciB0aGF0IHlpZWxkcyByZXNwb25zZSBtZXNzYWdlcy5cbiAgICAgKiBUaGUgZ2VuZXJhdG9yIGlzIGd1YXJhbnRlZWQgdG8gZW5kIHdpdGggZWl0aGVyIGEgJ3Jlc3VsdCcgb3IgJ2Vycm9yJyBtZXNzYWdlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgc3RyZWFtID0gcHJvdG9jb2wucmVxdWVzdFN0cmVhbShyZXF1ZXN0LCByZXN1bHRTY2hlbWEsIG9wdGlvbnMpO1xuICAgICAqIGZvciBhd2FpdCAoY29uc3QgbWVzc2FnZSBvZiBzdHJlYW0pIHtcbiAgICAgKiAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICogICAgIGNhc2UgJ3Rhc2tDcmVhdGVkJzpcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZygnVGFzayBjcmVhdGVkOicsIG1lc3NhZ2UudGFzay50YXNrSWQpO1xuICAgICAqICAgICAgIGJyZWFrO1xuICAgICAqICAgICBjYXNlICd0YXNrU3RhdHVzJzpcbiAgICAgKiAgICAgICBjb25zb2xlLmxvZygnVGFzayBzdGF0dXM6JywgbWVzc2FnZS50YXNrLnN0YXR1cyk7XG4gICAgICogICAgICAgYnJlYWs7XG4gICAgICogICAgIGNhc2UgJ3Jlc3VsdCc6XG4gICAgICogICAgICAgY29uc29sZS5sb2coJ0ZpbmFsIHJlc3VsdDonLCBtZXNzYWdlLnJlc3VsdCk7XG4gICAgICogICAgICAgYnJlYWs7XG4gICAgICogICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgKiAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBtZXNzYWdlLmVycm9yKTtcbiAgICAgKiAgICAgICBicmVhaztcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhwZXJpbWVudGFsIFVzZSBgY2xpZW50LmV4cGVyaW1lbnRhbC50YXNrcy5yZXF1ZXN0U3RyZWFtKClgIHRvIGFjY2VzcyB0aGlzIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhc3luYyAqcmVxdWVzdFN0cmVhbShyZXF1ZXN0LCByZXN1bHRTY2hlbWEsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyB0YXNrIH0gPSBvcHRpb25zID8/IHt9O1xuICAgICAgICAvLyBGb3Igbm9uLXRhc2sgcmVxdWVzdHMsIGp1c3QgeWllbGQgdGhlIHJlc3VsdFxuICAgICAgICBpZiAoIXRhc2spIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHJlcXVlc3QsIHJlc3VsdFNjaGVtYSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgeWllbGQgeyB0eXBlOiAncmVzdWx0JywgcmVzdWx0IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIE1jcEVycm9yID8gZXJyb3IgOiBuZXcgTWNwRXJyb3IoRXJyb3JDb2RlLkludGVybmFsRXJyb3IsIFN0cmluZyhlcnJvcikpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3IgdGFzay1hdWdtZW50ZWQgcmVxdWVzdHMsIHdlIG5lZWQgdG8gcG9sbCBmb3Igc3RhdHVzXG4gICAgICAgIC8vIEZpcnN0LCBtYWtlIHRoZSByZXF1ZXN0IHRvIGNyZWF0ZSB0aGUgdGFza1xuICAgICAgICBsZXQgdGFza0lkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gU2VuZCB0aGUgcmVxdWVzdCBhbmQgZ2V0IHRoZSBDcmVhdGVUYXNrUmVzdWx0XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVSZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QocmVxdWVzdCwgQ3JlYXRlVGFza1Jlc3VsdFNjaGVtYSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAvLyBFeHRyYWN0IHRhc2tJZCBmcm9tIHRoZSByZXN1bHRcbiAgICAgICAgICAgIGlmIChjcmVhdGVSZXN1bHQudGFzaykge1xuICAgICAgICAgICAgICAgIHRhc2tJZCA9IGNyZWF0ZVJlc3VsdC50YXNrLnRhc2tJZDtcbiAgICAgICAgICAgICAgICB5aWVsZCB7IHR5cGU6ICd0YXNrQ3JlYXRlZCcsIHRhc2s6IGNyZWF0ZVJlc3VsdC50YXNrIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTWNwRXJyb3IoRXJyb3JDb2RlLkludGVybmFsRXJyb3IsICdUYXNrIGNyZWF0aW9uIGRpZCBub3QgcmV0dXJuIGEgdGFzaycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUG9sbCBmb3IgdGFzayBjb21wbGV0aW9uXG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIC8vIEdldCBjdXJyZW50IHRhc2sgc3RhdHVzXG4gICAgICAgICAgICAgICAgY29uc3QgdGFzayA9IGF3YWl0IHRoaXMuZ2V0VGFzayh7IHRhc2tJZCB9LCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB5aWVsZCB7IHR5cGU6ICd0YXNrU3RhdHVzJywgdGFzayB9O1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRhc2sgaXMgdGVybWluYWxcbiAgICAgICAgICAgICAgICBpZiAoaXNUZXJtaW5hbCh0YXNrLnN0YXR1cykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2suc3RhdHVzID09PSAnY29tcGxldGVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBmaW5hbCByZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7IHRhc2tJZCB9LCByZXN1bHRTY2hlbWEsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgeyB0eXBlOiAncmVzdWx0JywgcmVzdWx0IH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGFzay5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogbmV3IE1jcEVycm9yKEVycm9yQ29kZS5JbnRlcm5hbEVycm9yLCBgVGFzayAke3Rhc2tJZH0gZmFpbGVkYClcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGFzay5zdGF0dXMgPT09ICdjYW5jZWxsZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogbmV3IE1jcEVycm9yKEVycm9yQ29kZS5JbnRlcm5hbEVycm9yLCBgVGFzayAke3Rhc2tJZH0gd2FzIGNhbmNlbGxlZGApXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gV2hlbiBpbnB1dF9yZXF1aXJlZCwgY2FsbCB0YXNrcy9yZXN1bHQgdG8gZGVsaXZlciBxdWV1ZWQgbWVzc2FnZXNcbiAgICAgICAgICAgICAgICAvLyAoZWxpY2l0YXRpb24sIHNhbXBsaW5nKSB2aWEgU1NFIGFuZCBibG9jayB1bnRpbCB0ZXJtaW5hbFxuICAgICAgICAgICAgICAgIGlmICh0YXNrLnN0YXR1cyA9PT0gJ2lucHV0X3JlcXVpcmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldFRhc2tSZXN1bHQoeyB0YXNrSWQgfSwgcmVzdWx0U2NoZW1hLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgeyB0eXBlOiAncmVzdWx0JywgcmVzdWx0IH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gV2FpdCBiZWZvcmUgcG9sbGluZyBhZ2FpblxuICAgICAgICAgICAgICAgIGNvbnN0IHBvbGxJbnRlcnZhbCA9IHRhc2sucG9sbEludGVydmFsID8/IHRoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsID8/IDEwMDA7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHBvbGxJbnRlcnZhbCkpO1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGNhbmNlbGxlZFxuICAgICAgICAgICAgICAgIG9wdGlvbnM/LnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIE1jcEVycm9yID8gZXJyb3IgOiBuZXcgTWNwRXJyb3IoRXJyb3JDb2RlLkludGVybmFsRXJyb3IsIFN0cmluZyhlcnJvcikpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmRzIGEgcmVxdWVzdCBhbmQgd2FpdHMgZm9yIGEgcmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBEbyBub3QgdXNlIHRoaXMgbWV0aG9kIHRvIGVtaXQgbm90aWZpY2F0aW9ucyEgVXNlIG5vdGlmaWNhdGlvbigpIGluc3RlYWQuXG4gICAgICovXG4gICAgcmVxdWVzdChyZXF1ZXN0LCByZXN1bHRTY2hlbWEsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyByZWxhdGVkUmVxdWVzdElkLCByZXN1bXB0aW9uVG9rZW4sIG9ucmVzdW1wdGlvbnRva2VuLCB0YXNrLCByZWxhdGVkVGFzayB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgICAgICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWFybHlSZWplY3QgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICghdGhpcy5fdHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAgICAgZWFybHlSZWplY3QobmV3IEVycm9yKCdOb3QgY29ubmVjdGVkJykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zPy5lbmZvcmNlU3RyaWN0Q2FwYWJpbGl0aWVzID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHJlcXVlc3QubWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGFzayBjcmVhdGlvbiBpcyByZXF1ZXN0ZWQsIGFsc28gY2hlY2sgdGFzayBjYXBhYmlsaXRpZXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0VGFza0NhcGFiaWxpdHkocmVxdWVzdC5tZXRob2QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVhcmx5UmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZUlkID0gdGhpcy5fcmVxdWVzdE1lc3NhZ2VJZCsrO1xuICAgICAgICAgICAgY29uc3QganNvbnJwY1JlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgLi4ucmVxdWVzdCxcbiAgICAgICAgICAgICAgICBqc29ucnBjOiAnMi4wJyxcbiAgICAgICAgICAgICAgICBpZDogbWVzc2FnZUlkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG9wdGlvbnM/Lm9ucHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLnNldChtZXNzYWdlSWQsIG9wdGlvbnMub25wcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAganNvbnJwY1JlcXVlc3QucGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LnBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgX21ldGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihyZXF1ZXN0LnBhcmFtcz8uX21ldGEgfHwge30pLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NUb2tlbjogbWVzc2FnZUlkXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQXVnbWVudCB3aXRoIHRhc2sgY3JlYXRpb24gcGFyYW1ldGVycyBpZiBwcm92aWRlZFxuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICBqc29ucnBjUmVxdWVzdC5wYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmpzb25ycGNSZXF1ZXN0LnBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgdGFzazogdGFza1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBdWdtZW50IHdpdGggcmVsYXRlZCB0YXNrIG1ldGFkYXRhIGlmIHJlbGF0ZWRUYXNrIGlzIHByb3ZpZGVkXG4gICAgICAgICAgICBpZiAocmVsYXRlZFRhc2spIHtcbiAgICAgICAgICAgICAgICBqc29ucnBjUmVxdWVzdC5wYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmpzb25ycGNSZXF1ZXN0LnBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgX21ldGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihqc29ucnBjUmVxdWVzdC5wYXJhbXM/Ll9tZXRhIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtSRUxBVEVEX1RBU0tfTUVUQV9LRVldOiByZWxhdGVkVGFza1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNhbmNlbCA9IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShtZXNzYWdlSWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG1lc3NhZ2VJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xlYW51cFRpbWVvdXQobWVzc2FnZUlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc3BvcnRcbiAgICAgICAgICAgICAgICAgICAgPy5zZW5kKHtcbiAgICAgICAgICAgICAgICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ25vdGlmaWNhdGlvbnMvY2FuY2VsbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IG1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogU3RyaW5nKHJlYXNvbilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHsgcmVsYXRlZFJlcXVlc3RJZCwgcmVzdW1wdGlvblRva2VuLCBvbnJlc3VtcHRpb250b2tlbiB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gdGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGNhbmNlbGxhdGlvbjogJHtlcnJvcn1gKSkpO1xuICAgICAgICAgICAgICAgIC8vIFdyYXAgdGhlIHJlYXNvbiBpbiBhbiBNY3BFcnJvciBpZiBpdCBpc24ndCBhbHJlYWR5XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSByZWFzb24gaW5zdGFuY2VvZiBNY3BFcnJvciA/IHJlYXNvbiA6IG5ldyBNY3BFcnJvcihFcnJvckNvZGUuUmVxdWVzdFRpbWVvdXQsIFN0cmluZyhyZWFzb24pKTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuc2V0KG1lc3NhZ2VJZCwgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zPy5zaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VSZXN1bHQgPSBzYWZlUGFyc2UocmVzdWx0U2NoZW1hLCByZXNwb25zZS5yZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR5cGUgZ3VhcmQ6IGlmIHN1Y2Nlc3MgaXMgZmFsc2UsIGVycm9yIGlzIGd1YXJhbnRlZWQgdG8gZXhpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChwYXJzZVJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHBhcnNlUmVzdWx0LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb3B0aW9ucz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjYW5jZWwob3B0aW9ucz8uc2lnbmFsPy5yZWFzb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gb3B0aW9ucz8udGltZW91dCA/PyBERUZBVUxUX1JFUVVFU1RfVElNRU9VVF9NU0VDO1xuICAgICAgICAgICAgY29uc3QgdGltZW91dEhhbmRsZXIgPSAoKSA9PiBjYW5jZWwoTWNwRXJyb3IuZnJvbUVycm9yKEVycm9yQ29kZS5SZXF1ZXN0VGltZW91dCwgJ1JlcXVlc3QgdGltZWQgb3V0JywgeyB0aW1lb3V0IH0pKTtcbiAgICAgICAgICAgIHRoaXMuX3NldHVwVGltZW91dChtZXNzYWdlSWQsIHRpbWVvdXQsIG9wdGlvbnM/Lm1heFRvdGFsVGltZW91dCwgdGltZW91dEhhbmRsZXIsIG9wdGlvbnM/LnJlc2V0VGltZW91dE9uUHJvZ3Jlc3MgPz8gZmFsc2UpO1xuICAgICAgICAgICAgLy8gUXVldWUgcmVxdWVzdCBpZiByZWxhdGVkIHRvIGEgdGFza1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZFRhc2tJZCA9IHJlbGF0ZWRUYXNrPy50YXNrSWQ7XG4gICAgICAgICAgICBpZiAocmVsYXRlZFRhc2tJZCkge1xuICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSByZXNwb25zZSByZXNvbHZlciBmb3IgdGhpcyByZXF1ZXN0IHNvIHJlc3BvbnNlcyBjYW4gYmUgcm91dGVkIGJhY2tcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZVJlc29sdmVyID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChtZXNzYWdlSWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcihyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2cgZXJyb3Igd2hlbiByZXNvbHZlciBpcyBtaXNzaW5nLCBidXQgZG9uJ3QgZmFpbFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlc3BvbnNlIGhhbmRsZXIgbWlzc2luZyBmb3Igc2lkZS1jaGFubmVsZWQgcmVxdWVzdCAke21lc3NhZ2VJZH1gKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuc2V0KG1lc3NhZ2VJZCwgcmVzcG9uc2VSZXNvbHZlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHJlbGF0ZWRUYXNrSWQsIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3JlcXVlc3QnLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBqc29ucnBjUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhbnVwVGltZW91dChtZXNzYWdlSWQpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIERvbid0IHNlbmQgdGhyb3VnaCB0cmFuc3BvcnQgLSBxdWV1ZWQgbWVzc2FnZXMgYXJlIGRlbGl2ZXJlZCB2aWEgdGFza3MvcmVzdWx0IG9ubHlcbiAgICAgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIGR1cGxpY2F0ZSBkZWxpdmVyeSBmb3IgYmlkaXJlY3Rpb25hbCB0cmFuc3BvcnRzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBObyByZWxhdGVkIHRhc2sgLSBzZW5kIHRocm91Z2ggdHJhbnNwb3J0IG5vcm1hbGx5XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNwb3J0LnNlbmQoanNvbnJwY1JlcXVlc3QsIHsgcmVsYXRlZFJlcXVlc3RJZCwgcmVzdW1wdGlvblRva2VuLCBvbnJlc3VtcHRpb250b2tlbiB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFudXBUaW1lb3V0KG1lc3NhZ2VJZCk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiBhIHRhc2suXG4gICAgICpcbiAgICAgKiBAZXhwZXJpbWVudGFsIFVzZSBgY2xpZW50LmV4cGVyaW1lbnRhbC50YXNrcy5nZXRUYXNrKClgIHRvIGFjY2VzcyB0aGlzIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRUYXNrKHBhcmFtcywgb3B0aW9ucykge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFNlbmRSZXF1ZXN0VCBjYW5ub3QgZGlyZWN0bHkgY29udGFpbiBHZXRUYXNrUmVxdWVzdCwgYnV0IHdlIGVuc3VyZSBhbGwgdHlwZSBpbnN0YW50aWF0aW9ucyBjb250YWluIGl0IGFueXdheXNcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCh7IG1ldGhvZDogJ3Rhc2tzL2dldCcsIHBhcmFtcyB9LCBHZXRUYXNrUmVzdWx0U2NoZW1hLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSByZXN1bHQgb2YgYSBjb21wbGV0ZWQgdGFzay5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWwgVXNlIGBjbGllbnQuZXhwZXJpbWVudGFsLnRhc2tzLmdldFRhc2tSZXN1bHQoKWAgdG8gYWNjZXNzIHRoaXMgbWV0aG9kLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFRhc2tSZXN1bHQocGFyYW1zLCByZXN1bHRTY2hlbWEsIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBTZW5kUmVxdWVzdFQgY2Fubm90IGRpcmVjdGx5IGNvbnRhaW4gR2V0VGFza1BheWxvYWRSZXF1ZXN0LCBidXQgd2UgZW5zdXJlIGFsbCB0eXBlIGluc3RhbnRpYXRpb25zIGNvbnRhaW4gaXQgYW55d2F5c1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiAndGFza3MvcmVzdWx0JywgcGFyYW1zIH0sIHJlc3VsdFNjaGVtYSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExpc3RzIHRhc2tzLCBvcHRpb25hbGx5IHN0YXJ0aW5nIGZyb20gYSBwYWdpbmF0aW9uIGN1cnNvci5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWwgVXNlIGBjbGllbnQuZXhwZXJpbWVudGFsLnRhc2tzLmxpc3RUYXNrcygpYCB0byBhY2Nlc3MgdGhpcyBtZXRob2QuXG4gICAgICovXG4gICAgYXN5bmMgbGlzdFRhc2tzKHBhcmFtcywgb3B0aW9ucykge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFNlbmRSZXF1ZXN0VCBjYW5ub3QgZGlyZWN0bHkgY29udGFpbiBMaXN0VGFza3NSZXF1ZXN0LCBidXQgd2UgZW5zdXJlIGFsbCB0eXBlIGluc3RhbnRpYXRpb25zIGNvbnRhaW4gaXQgYW55d2F5c1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiAndGFza3MvbGlzdCcsIHBhcmFtcyB9LCBMaXN0VGFza3NSZXN1bHRTY2hlbWEsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYW5jZWxzIGEgc3BlY2lmaWMgdGFzay5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWwgVXNlIGBjbGllbnQuZXhwZXJpbWVudGFsLnRhc2tzLmNhbmNlbFRhc2soKWAgdG8gYWNjZXNzIHRoaXMgbWV0aG9kLlxuICAgICAqL1xuICAgIGFzeW5jIGNhbmNlbFRhc2socGFyYW1zLCBvcHRpb25zKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgU2VuZFJlcXVlc3RUIGNhbm5vdCBkaXJlY3RseSBjb250YWluIENhbmNlbFRhc2tSZXF1ZXN0LCBidXQgd2UgZW5zdXJlIGFsbCB0eXBlIGluc3RhbnRpYXRpb25zIGNvbnRhaW4gaXQgYW55d2F5c1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHsgbWV0aG9kOiAndGFza3MvY2FuY2VsJywgcGFyYW1zIH0sIENhbmNlbFRhc2tSZXN1bHRTY2hlbWEsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXMgYSBvbmUtd2F5IG1lc3NhZ2UgdGhhdCBkb2VzIG5vdCBleHBlY3QgYSByZXNwb25zZS5cbiAgICAgKi9cbiAgICBhc3luYyBub3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy5fdHJhbnNwb3J0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBjb25uZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkobm90aWZpY2F0aW9uLm1ldGhvZCk7XG4gICAgICAgIC8vIFF1ZXVlIG5vdGlmaWNhdGlvbiBpZiByZWxhdGVkIHRvIGEgdGFza1xuICAgICAgICBjb25zdCByZWxhdGVkVGFza0lkID0gb3B0aW9ucz8ucmVsYXRlZFRhc2s/LnRhc2tJZDtcbiAgICAgICAgaWYgKHJlbGF0ZWRUYXNrSWQpIHtcbiAgICAgICAgICAgIC8vIEJ1aWxkIHRoZSBKU09OUlBDIG5vdGlmaWNhdGlvbiB3aXRoIG1ldGFkYXRhXG4gICAgICAgICAgICBjb25zdCBqc29ucnBjTm90aWZpY2F0aW9uID0ge1xuICAgICAgICAgICAgICAgIC4uLm5vdGlmaWNhdGlvbixcbiAgICAgICAgICAgICAgICBqc29ucnBjOiAnMi4wJyxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubm90aWZpY2F0aW9uLnBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgX21ldGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihub3RpZmljYXRpb24ucGFyYW1zPy5fbWV0YSB8fCB7fSksXG4gICAgICAgICAgICAgICAgICAgICAgICBbUkVMQVRFRF9UQVNLX01FVEFfS0VZXTogb3B0aW9ucy5yZWxhdGVkVGFza1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShyZWxhdGVkVGFza0lkLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ25vdGlmaWNhdGlvbicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZToganNvbnJwY05vdGlmaWNhdGlvbixcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gRG9uJ3Qgc2VuZCB0aHJvdWdoIHRyYW5zcG9ydCAtIHF1ZXVlZCBtZXNzYWdlcyBhcmUgZGVsaXZlcmVkIHZpYSB0YXNrcy9yZXN1bHQgb25seVxuICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBkdXBsaWNhdGUgZGVsaXZlcnkgZm9yIGJpZGlyZWN0aW9uYWwgdHJhbnNwb3J0c1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlYm91bmNlZE1ldGhvZHMgPSB0aGlzLl9vcHRpb25zPy5kZWJvdW5jZWROb3RpZmljYXRpb25NZXRob2RzID8/IFtdO1xuICAgICAgICAvLyBBIG5vdGlmaWNhdGlvbiBjYW4gb25seSBiZSBkZWJvdW5jZWQgaWYgaXQncyBpbiB0aGUgbGlzdCBBTkQgaXQncyBcInNpbXBsZVwiXG4gICAgICAgIC8vIChpLmUuLCBoYXMgbm8gcGFyYW1ldGVycyBhbmQgbm8gcmVsYXRlZCByZXF1ZXN0IElEIG9yIHJlbGF0ZWQgdGFzayB0aGF0IGNvdWxkIGJlIGxvc3QpLlxuICAgICAgICBjb25zdCBjYW5EZWJvdW5jZSA9IGRlYm91bmNlZE1ldGhvZHMuaW5jbHVkZXMobm90aWZpY2F0aW9uLm1ldGhvZCkgJiYgIW5vdGlmaWNhdGlvbi5wYXJhbXMgJiYgIW9wdGlvbnM/LnJlbGF0ZWRSZXF1ZXN0SWQgJiYgIW9wdGlvbnM/LnJlbGF0ZWRUYXNrO1xuICAgICAgICBpZiAoY2FuRGVib3VuY2UpIHtcbiAgICAgICAgICAgIC8vIElmIGEgbm90aWZpY2F0aW9uIG9mIHRoaXMgdHlwZSBpcyBhbHJlYWR5IHNjaGVkdWxlZCwgZG8gbm90aGluZy5cbiAgICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5oYXMobm90aWZpY2F0aW9uLm1ldGhvZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYXJrIHRoaXMgbm90aWZpY2F0aW9uIHR5cGUgYXMgcGVuZGluZy5cbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmFkZChub3RpZmljYXRpb24ubWV0aG9kKTtcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIHRoZSBhY3R1YWwgc2VuZCB0byBoYXBwZW4gaW4gdGhlIG5leHQgbWljcm90YXNrLlxuICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgYWxsIHN5bmNocm9ub3VzIGNhbGxzIGluIHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgdGljayB0byBiZSBjb2FsZXNjZWQuXG4gICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBVbi1tYXJrIHRoZSBub3RpZmljYXRpb24gc28gdGhlIG5leHQgb25lIGNhbiBiZSBzY2hlZHVsZWQuXG4gICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuZGVsZXRlKG5vdGlmaWNhdGlvbi5tZXRob2QpO1xuICAgICAgICAgICAgICAgIC8vIFNBRkVUWSBDSEVDSzogSWYgdGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCB3aGlsZSB0aGlzIHdhcyBwZW5kaW5nLCBhYm9ydC5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3RyYW5zcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBqc29ucnBjTm90aWZpY2F0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5ub3RpZmljYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGpzb25ycGM6ICcyLjAnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyBBdWdtZW50IHdpdGggcmVsYXRlZCB0YXNrIG1ldGFkYXRhIGlmIHJlbGF0ZWRUYXNrIGlzIHByb3ZpZGVkXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnM/LnJlbGF0ZWRUYXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGpzb25ycGNOb3RpZmljYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5qc29ucnBjTm90aWZpY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uanNvbnJwY05vdGlmaWNhdGlvbi5wYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX21ldGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKGpzb25ycGNOb3RpZmljYXRpb24ucGFyYW1zPy5fbWV0YSB8fCB7fSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtSRUxBVEVEX1RBU0tfTUVUQV9LRVldOiBvcHRpb25zLnJlbGF0ZWRUYXNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTZW5kIHRoZSBub3RpZmljYXRpb24sIGJ1dCBkb24ndCBhd2FpdCBpdCBoZXJlIHRvIGF2b2lkIGJsb2NraW5nLlxuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBwb3RlbnRpYWwgZXJyb3JzIHdpdGggYSAuY2F0Y2goKS5cbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc3BvcnQ/LnNlbmQoanNvbnJwY05vdGlmaWNhdGlvbiwgb3B0aW9ucykuY2F0Y2goZXJyb3IgPT4gdGhpcy5fb25lcnJvcihlcnJvcikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBSZXR1cm4gaW1tZWRpYXRlbHkuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGpzb25ycGNOb3RpZmljYXRpb24gPSB7XG4gICAgICAgICAgICAuLi5ub3RpZmljYXRpb24sXG4gICAgICAgICAgICBqc29ucnBjOiAnMi4wJ1xuICAgICAgICB9O1xuICAgICAgICAvLyBBdWdtZW50IHdpdGggcmVsYXRlZCB0YXNrIG1ldGFkYXRhIGlmIHJlbGF0ZWRUYXNrIGlzIHByb3ZpZGVkXG4gICAgICAgIGlmIChvcHRpb25zPy5yZWxhdGVkVGFzaykge1xuICAgICAgICAgICAganNvbnJwY05vdGlmaWNhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAuLi5qc29ucnBjTm90aWZpY2F0aW9uLFxuICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAuLi5qc29ucnBjTm90aWZpY2F0aW9uLnBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgX21ldGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihqc29ucnBjTm90aWZpY2F0aW9uLnBhcmFtcz8uX21ldGEgfHwge30pLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1JFTEFURURfVEFTS19NRVRBX0tFWV06IG9wdGlvbnMucmVsYXRlZFRhc2tcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnNlbmQoanNvbnJwY05vdGlmaWNhdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVycyBhIGhhbmRsZXIgdG8gaW52b2tlIHdoZW4gdGhpcyBwcm90b2NvbCBvYmplY3QgcmVjZWl2ZXMgYSByZXF1ZXN0IHdpdGggdGhlIGdpdmVuIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgcmVwbGFjZSBhbnkgcHJldmlvdXMgcmVxdWVzdCBoYW5kbGVyIGZvciB0aGUgc2FtZSBtZXRob2QuXG4gICAgICovXG4gICAgc2V0UmVxdWVzdEhhbmRsZXIocmVxdWVzdFNjaGVtYSwgaGFuZGxlcikge1xuICAgICAgICBjb25zdCBtZXRob2QgPSBnZXRNZXRob2RMaXRlcmFsKHJlcXVlc3RTY2hlbWEpO1xuICAgICAgICB0aGlzLmFzc2VydFJlcXVlc3RIYW5kbGVyQ2FwYWJpbGl0eShtZXRob2QpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuc2V0KG1ldGhvZCwgKHJlcXVlc3QsIGV4dHJhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVdpdGhDb21wYXQocmVxdWVzdFNjaGVtYSwgcmVxdWVzdCk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhbmRsZXIocGFyc2VkLCBleHRyYSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgcmVxdWVzdCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gbWV0aG9kLlxuICAgICAqL1xuICAgIHJlbW92ZVJlcXVlc3RIYW5kbGVyKG1ldGhvZCkge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZGVsZXRlKG1ldGhvZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzc2VydHMgdGhhdCBhIHJlcXVlc3QgaGFuZGxlciBoYXMgbm90IGFscmVhZHkgYmVlbiBzZXQgZm9yIHRoZSBnaXZlbiBtZXRob2QsIGluIHByZXBhcmF0aW9uIGZvciBhIG5ldyBvbmUgYmVpbmcgYXV0b21hdGljYWxseSBpbnN0YWxsZWQuXG4gICAgICovXG4gICAgYXNzZXJ0Q2FuU2V0UmVxdWVzdEhhbmRsZXIobWV0aG9kKSB7XG4gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuaGFzKG1ldGhvZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQSByZXF1ZXN0IGhhbmRsZXIgZm9yICR7bWV0aG9kfSBhbHJlYWR5IGV4aXN0cywgd2hpY2ggd291bGQgYmUgb3ZlcnJpZGRlbmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVycyBhIGhhbmRsZXIgdG8gaW52b2tlIHdoZW4gdGhpcyBwcm90b2NvbCBvYmplY3QgcmVjZWl2ZXMgYSBub3RpZmljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbWV0aG9kLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHRoaXMgd2lsbCByZXBsYWNlIGFueSBwcmV2aW91cyBub3RpZmljYXRpb24gaGFuZGxlciBmb3IgdGhlIHNhbWUgbWV0aG9kLlxuICAgICAqL1xuICAgIHNldE5vdGlmaWNhdGlvbkhhbmRsZXIobm90aWZpY2F0aW9uU2NoZW1hLCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IGdldE1ldGhvZExpdGVyYWwobm90aWZpY2F0aW9uU2NoZW1hKTtcbiAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuc2V0KG1ldGhvZCwgbm90aWZpY2F0aW9uID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlV2l0aENvbXBhdChub3RpZmljYXRpb25TY2hlbWEsIG5vdGlmaWNhdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhbmRsZXIocGFyc2VkKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBub3RpZmljYXRpb24gaGFuZGxlciBmb3IgdGhlIGdpdmVuIG1ldGhvZC5cbiAgICAgKi9cbiAgICByZW1vdmVOb3RpZmljYXRpb25IYW5kbGVyKG1ldGhvZCkge1xuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5kZWxldGUobWV0aG9kKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYW5zIHVwIHRoZSBwcm9ncmVzcyBoYW5kbGVyIGFzc29jaWF0ZWQgd2l0aCBhIHRhc2suXG4gICAgICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYSB0YXNrIHJlYWNoZXMgYSB0ZXJtaW5hbCBzdGF0dXMuXG4gICAgICovXG4gICAgX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHRhc2tJZCkge1xuICAgICAgICBjb25zdCBwcm9ncmVzc1Rva2VuID0gdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmdldCh0YXNrSWQpO1xuICAgICAgICBpZiAocHJvZ3Jlc3NUb2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShwcm9ncmVzc1Rva2VuKTtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5kZWxldGUodGFza0lkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbnF1ZXVlcyBhIHRhc2stcmVsYXRlZCBtZXNzYWdlIGZvciBzaWRlLWNoYW5uZWwgZGVsaXZlcnkgdmlhIHRhc2tzL3Jlc3VsdC5cbiAgICAgKiBAcGFyYW0gdGFza0lkIFRoZSB0YXNrIElEIHRvIGFzc29jaWF0ZSB0aGUgbWVzc2FnZSB3aXRoXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gZW5xdWV1ZVxuICAgICAqIEBwYXJhbSBzZXNzaW9uSWQgT3B0aW9uYWwgc2Vzc2lvbiBJRCBmb3IgYmluZGluZyB0aGUgb3BlcmF0aW9uIHRvIGEgc3BlY2lmaWMgc2Vzc2lvblxuICAgICAqIEB0aHJvd3MgRXJyb3IgaWYgdGFza1N0b3JlIGlzIG5vdCBjb25maWd1cmVkIG9yIGlmIGVucXVldWUgZmFpbHMgKGUuZy4sIHF1ZXVlIG92ZXJmbG93KVxuICAgICAqXG4gICAgICogTm90ZTogSWYgZW5xdWV1ZSBmYWlscywgaXQncyB0aGUgVGFza01lc3NhZ2VRdWV1ZSBpbXBsZW1lbnRhdGlvbidzIHJlc3BvbnNpYmlsaXR5IHRvIGhhbmRsZVxuICAgICAqIHRoZSBlcnJvciBhcHByb3ByaWF0ZWx5IChlLmcuLCBieSBmYWlsaW5nIHRoZSB0YXNrLCBsb2dnaW5nLCBldGMuKS4gVGhlIFByb3RvY29sIGxheWVyXG4gICAgICogc2ltcGx5IHByb3BhZ2F0ZXMgdGhlIGVycm9yLlxuICAgICAqL1xuICAgIGFzeW5jIF9lbnF1ZXVlVGFza01lc3NhZ2UodGFza0lkLCBtZXNzYWdlLCBzZXNzaW9uSWQpIHtcbiAgICAgICAgLy8gVGFzayBtZXNzYWdlIHF1ZXVlcyBhcmUgb25seSB1c2VkIHdoZW4gdGFza1N0b3JlIGlzIGNvbmZpZ3VyZWRcbiAgICAgICAgaWYgKCF0aGlzLl90YXNrU3RvcmUgfHwgIXRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGVucXVldWUgdGFzayBtZXNzYWdlOiB0YXNrU3RvcmUgYW5kIHRhc2tNZXNzYWdlUXVldWUgYXJlIG5vdCBjb25maWd1cmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF4UXVldWVTaXplID0gdGhpcy5fb3B0aW9ucz8ubWF4VGFza1F1ZXVlU2l6ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5lbnF1ZXVlKHRhc2tJZCwgbWVzc2FnZSwgc2Vzc2lvbklkLCBtYXhRdWV1ZVNpemUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIG1lc3NhZ2UgcXVldWUgZm9yIGEgdGFzayBhbmQgcmVqZWN0cyBhbnkgcGVuZGluZyByZXF1ZXN0IHJlc29sdmVycy5cbiAgICAgKiBAcGFyYW0gdGFza0lkIFRoZSB0YXNrIElEIHdob3NlIHF1ZXVlIHNob3VsZCBiZSBjbGVhcmVkXG4gICAgICogQHBhcmFtIHNlc3Npb25JZCBPcHRpb25hbCBzZXNzaW9uIElEIGZvciBiaW5kaW5nIHRoZSBvcGVyYXRpb24gdG8gYSBzcGVjaWZpYyBzZXNzaW9uXG4gICAgICovXG4gICAgYXN5bmMgX2NsZWFyVGFza1F1ZXVlKHRhc2tJZCwgc2Vzc2lvbklkKSB7XG4gICAgICAgIGlmICh0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKSB7XG4gICAgICAgICAgICAvLyBSZWplY3QgYW55IHBlbmRpbmcgcmVxdWVzdCByZXNvbHZlcnNcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlQWxsKHRhc2tJZCwgc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICdyZXF1ZXN0JyAmJiBpc0pTT05SUENSZXF1ZXN0KG1lc3NhZ2UubWVzc2FnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCByZXF1ZXN0IElEIGZyb20gdGhlIG1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdElkID0gbWVzc2FnZS5tZXNzYWdlLmlkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlciA9IHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXIobmV3IE1jcEVycm9yKEVycm9yQ29kZS5JbnRlcm5hbEVycm9yLCAnVGFzayBjYW5jZWxsZWQgb3IgY29tcGxldGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUocmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvZyBlcnJvciB3aGVuIHJlc29sdmVyIGlzIG1pc3NpbmcgZHVyaW5nIGNsZWFudXAgZm9yIGJldHRlciBvYnNlcnZhYmlsaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzb2x2ZXIgbWlzc2luZyBmb3IgcmVxdWVzdCAke3JlcXVlc3RJZH0gZHVyaW5nIHRhc2sgJHt0YXNrSWR9IGNsZWFudXBgKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogV2FpdHMgZm9yIGEgdGFzayB1cGRhdGUgKG5ldyBtZXNzYWdlcyBvciBzdGF0dXMgY2hhbmdlKSB3aXRoIGFib3J0IHNpZ25hbCBzdXBwb3J0LlxuICAgICAqIFVzZXMgcG9sbGluZyB0byBjaGVjayBmb3IgdXBkYXRlcyBhdCB0aGUgdGFzaydzIGNvbmZpZ3VyZWQgcG9sbCBpbnRlcnZhbC5cbiAgICAgKiBAcGFyYW0gdGFza0lkIFRoZSB0YXNrIElEIHRvIHdhaXQgZm9yXG4gICAgICogQHBhcmFtIHNpZ25hbCBBYm9ydCBzaWduYWwgdG8gY2FuY2VsIHRoZSB3YWl0XG4gICAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gYW4gdXBkYXRlIG9jY3VycyBvciByZWplY3RzIGlmIGFib3J0ZWRcbiAgICAgKi9cbiAgICBhc3luYyBfd2FpdEZvclRhc2tVcGRhdGUodGFza0lkLCBzaWduYWwpIHtcbiAgICAgICAgLy8gR2V0IHRoZSB0YXNrJ3MgcG9sbCBpbnRlcnZhbCwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHRcbiAgICAgICAgbGV0IGludGVydmFsID0gdGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWwgPz8gMTAwMDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBhd2FpdCB0aGlzLl90YXNrU3RvcmU/LmdldFRhc2sodGFza0lkKTtcbiAgICAgICAgICAgIGlmICh0YXNrPy5wb2xsSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICBpbnRlcnZhbCA9IHRhc2sucG9sbEludGVydmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIC8vIFVzZSBkZWZhdWx0IGludGVydmFsIGlmIHRhc2sgbG9va3VwIGZhaWxzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgTWNwRXJyb3IoRXJyb3JDb2RlLkludmFsaWRSZXF1ZXN0LCAnUmVxdWVzdCBjYW5jZWxsZWQnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHBvbGwgaW50ZXJ2YWwsIHRoZW4gcmVzb2x2ZSBzbyBjYWxsZXIgY2FuIGNoZWNrIGZvciB1cGRhdGVzXG4gICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KHJlc29sdmUsIGludGVydmFsKTtcbiAgICAgICAgICAgIC8vIENsZWFuIHVwIHRpbWVvdXQgYW5kIHJlamVjdCBpZiBhYm9ydGVkXG4gICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBNY3BFcnJvcihFcnJvckNvZGUuSW52YWxpZFJlcXVlc3QsICdSZXF1ZXN0IGNhbmNlbGxlZCcpKTtcbiAgICAgICAgICAgIH0sIHsgb25jZTogdHJ1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVlc3RUYXNrU3RvcmUocmVxdWVzdCwgc2Vzc2lvbklkKSB7XG4gICAgICAgIGNvbnN0IHRhc2tTdG9yZSA9IHRoaXMuX3Rhc2tTdG9yZTtcbiAgICAgICAgaWYgKCF0YXNrU3RvcmUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdGFzayBzdG9yZSBjb25maWd1cmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNyZWF0ZVRhc2s6IGFzeW5jICh0YXNrUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVxdWVzdCBwcm92aWRlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGFza1N0b3JlLmNyZWF0ZVRhc2sodGFza1BhcmFtcywgcmVxdWVzdC5pZCwge1xuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlcXVlc3QucGFyYW1zXG4gICAgICAgICAgICAgICAgfSwgc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRUYXNrOiBhc3luYyAodGFza0lkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFzayA9IGF3YWl0IHRhc2tTdG9yZS5nZXRUYXNrKHRhc2tJZCwgc2Vzc2lvbklkKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1jcEVycm9yKEVycm9yQ29kZS5JbnZhbGlkUGFyYW1zLCAnRmFpbGVkIHRvIHJldHJpZXZlIHRhc2s6IFRhc2sgbm90IGZvdW5kJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0YXNrO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0b3JlVGFza1Jlc3VsdDogYXN5bmMgKHRhc2tJZCwgc3RhdHVzLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0YXNrU3RvcmUuc3RvcmVUYXNrUmVzdWx0KHRhc2tJZCwgc3RhdHVzLCByZXN1bHQsIHNlc3Npb25JZCk7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHVwZGF0ZWQgdGFzayBzdGF0ZSBhbmQgc2VuZCBub3RpZmljYXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCB0YXNrID0gYXdhaXQgdGFza1N0b3JlLmdldFRhc2sodGFza0lkLCBzZXNzaW9uSWQpO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IFRhc2tTdGF0dXNOb3RpZmljYXRpb25TY2hlbWEucGFyc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnbm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB0YXNrXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUZXJtaW5hbCh0YXNrLnN0YXR1cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHRhc2tJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBjbGVhciBxdWV1ZSBoZXJlIC0gaXQgd2lsbCBiZSBjbGVhcmVkIGFmdGVyIGRlbGl2ZXJ5IHZpYSB0YXNrcy9yZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRUYXNrUmVzdWx0OiB0YXNrSWQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXNrU3RvcmUuZ2V0VGFza1Jlc3VsdCh0YXNrSWQsIHNlc3Npb25JZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlVGFza1N0YXR1czogYXN5bmMgKHRhc2tJZCwgc3RhdHVzLCBzdGF0dXNNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGFzayBleGlzdHNcbiAgICAgICAgICAgICAgICBjb25zdCB0YXNrID0gYXdhaXQgdGFza1N0b3JlLmdldFRhc2sodGFza0lkLCBzZXNzaW9uSWQpO1xuICAgICAgICAgICAgICAgIGlmICghdGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTWNwRXJyb3IoRXJyb3JDb2RlLkludmFsaWRQYXJhbXMsIGBUYXNrIFwiJHt0YXNrSWR9XCIgbm90IGZvdW5kIC0gaXQgbWF5IGhhdmUgYmVlbiBjbGVhbmVkIHVwYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIERvbid0IGFsbG93IHRyYW5zaXRpb25zIGZyb20gdGVybWluYWwgc3RhdGVzXG4gICAgICAgICAgICAgICAgaWYgKGlzVGVybWluYWwodGFzay5zdGF0dXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBNY3BFcnJvcihFcnJvckNvZGUuSW52YWxpZFBhcmFtcywgYENhbm5vdCB1cGRhdGUgdGFzayBcIiR7dGFza0lkfVwiIGZyb20gdGVybWluYWwgc3RhdHVzIFwiJHt0YXNrLnN0YXR1c31cIiB0byBcIiR7c3RhdHVzfVwiLiBUZXJtaW5hbCBzdGF0ZXMgKGNvbXBsZXRlZCwgZmFpbGVkLCBjYW5jZWxsZWQpIGNhbm5vdCB0cmFuc2l0aW9uIHRvIG90aGVyIHN0YXRlcy5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGFza1N0b3JlLnVwZGF0ZVRhc2tTdGF0dXModGFza0lkLCBzdGF0dXMsIHN0YXR1c01lc3NhZ2UsIHNlc3Npb25JZCk7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHVwZGF0ZWQgdGFzayBzdGF0ZSBhbmQgc2VuZCBub3RpZmljYXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVGFzayA9IGF3YWl0IHRhc2tTdG9yZS5nZXRUYXNrKHRhc2tJZCwgc2Vzc2lvbklkKTtcbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0gVGFza1N0YXR1c05vdGlmaWNhdGlvblNjaGVtYS5wYXJzZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cycsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHVwZGF0ZWRUYXNrXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUZXJtaW5hbCh1cGRhdGVkVGFzay5zdGF0dXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcih0YXNrSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY2xlYXIgcXVldWUgaGVyZSAtIGl0IHdpbGwgYmUgY2xlYXJlZCBhZnRlciBkZWxpdmVyeSB2aWEgdGFza3MvcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGlzdFRhc2tzOiBjdXJzb3IgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXNrU3RvcmUubGlzdFRhc2tzKGN1cnNvciwgc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ2FwYWJpbGl0aWVzKGJhc2UsIGFkZGl0aW9uYWwpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7IC4uLmJhc2UgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhZGRpdGlvbmFsKSB7XG4gICAgICAgIGNvbnN0IGsgPSBrZXk7XG4gICAgICAgIGNvbnN0IGFkZFZhbHVlID0gYWRkaXRpb25hbFtrXTtcbiAgICAgICAgaWYgKGFkZFZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3QgYmFzZVZhbHVlID0gcmVzdWx0W2tdO1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChiYXNlVmFsdWUpICYmIGlzUGxhaW5PYmplY3QoYWRkVmFsdWUpKSB7XG4gICAgICAgICAgICByZXN1bHRba10gPSB7IC4uLmJhc2VWYWx1ZSwgLi4uYWRkVmFsdWUgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IGFkZFZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm90b2NvbC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js":
/*!*****************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js ***!
\*****************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ReadBuffer: () => (/* binding */ ReadBuffer),\n/* harmony export */ deserializeMessage: () => (/* binding */ deserializeMessage),\n/* harmony export */ serializeMessage: () => (/* binding */ serializeMessage)\n/* harmony export */ });\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types.js */ \"(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js\");\n\n/**\n * Buffers a continuous stdio stream into discrete JSON-RPC messages.\n */\nclass ReadBuffer {\n append(chunk) {\n this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk;\n }\n readMessage() {\n if (!this._buffer) {\n return null;\n }\n const index = this._buffer.indexOf('\\n');\n if (index === -1) {\n return null;\n }\n const line = this._buffer.toString('utf8', 0, index).replace(/\\r$/, '');\n this._buffer = this._buffer.subarray(index + 1);\n return deserializeMessage(line);\n }\n clear() {\n this._buffer = undefined;\n }\n}\nfunction deserializeMessage(line) {\n return _types_js__WEBPACK_IMPORTED_MODULE_0__.JSONRPCMessageSchema.parse(JSON.parse(line));\n}\nfunction serializeMessage(message) {\n return JSON.stringify(message) + '\\n';\n}\n//# sourceMappingURL=stdio.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vc2hhcmVkL3N0ZGlvLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsV0FBVywyREFBb0I7QUFDL0I7QUFDTztBQUNQO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9kZWxjb250ZXh0cHJvdG9jb2wrc2RrQDEuMjkuMF96b2RAMy4yNS43Ni9ub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9kaXN0L2VzbS9zaGFyZWQvc3RkaW8uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSlNPTlJQQ01lc3NhZ2VTY2hlbWEgfSBmcm9tICcuLi90eXBlcy5qcyc7XG4vKipcbiAqIEJ1ZmZlcnMgYSBjb250aW51b3VzIHN0ZGlvIHN0cmVhbSBpbnRvIGRpc2NyZXRlIEpTT04tUlBDIG1lc3NhZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgUmVhZEJ1ZmZlciB7XG4gICAgYXBwZW5kKGNodW5rKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlciA9IHRoaXMuX2J1ZmZlciA/IEJ1ZmZlci5jb25jYXQoW3RoaXMuX2J1ZmZlciwgY2h1bmtdKSA6IGNodW5rO1xuICAgIH1cbiAgICByZWFkTWVzc2FnZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9idWZmZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fYnVmZmVyLmluZGV4T2YoJ1xcbicpO1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaW5lID0gdGhpcy5fYnVmZmVyLnRvU3RyaW5nKCd1dGY4JywgMCwgaW5kZXgpLnJlcGxhY2UoL1xcciQvLCAnJyk7XG4gICAgICAgIHRoaXMuX2J1ZmZlciA9IHRoaXMuX2J1ZmZlci5zdWJhcnJheShpbmRleCArIDEpO1xuICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVNZXNzYWdlKGxpbmUpO1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyID0gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZU1lc3NhZ2UobGluZSkge1xuICAgIHJldHVybiBKU09OUlBDTWVzc2FnZVNjaGVtYS5wYXJzZShKU09OLnBhcnNlKGxpbmUpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkgKyAnXFxuJztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0ZGlvLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.js":
/*!*********************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.js ***!
\*********************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createFetchWithInit: () => (/* binding */ createFetchWithInit),\n/* harmony export */ normalizeHeaders: () => (/* binding */ normalizeHeaders)\n/* harmony export */ });\n/**\n * Normalizes HeadersInit to a plain Record<string, string> for manipulation.\n * Handles Headers objects, arrays of tuples, and plain objects.\n */\nfunction normalizeHeaders(headers) {\n if (!headers)\n return {};\n if (headers instanceof Headers) {\n return Object.fromEntries(headers.entries());\n }\n if (Array.isArray(headers)) {\n return Object.fromEntries(headers);\n }\n return { ...headers };\n}\n/**\n * Creates a fetch function that includes base RequestInit options.\n * This ensures requests inherit settings like credentials, mode, headers, etc. from the base init.\n *\n * @param baseFetch - The base fetch function to wrap (defaults to global fetch)\n * @param baseInit - The base RequestInit to merge with each request\n * @returns A wrapped fetch function that merges base options with call-specific options\n */\nfunction createFetchWithInit(baseFetch = fetch, baseInit) {\n if (!baseInit) {\n return baseFetch;\n }\n // Return a wrapped fetch that merges base RequestInit with call-specific init\n return async (url, init) => {\n const mergedInit = {\n ...baseInit,\n ...init,\n // Headers need special handling - merge instead of replace\n headers: init?.headers ? { ...normalizeHeaders(baseInit.headers), ...normalizeHeaders(init.headers) } : baseInit.headers\n };\n return baseFetch(url, mergedInit);\n };\n}\n//# sourceMappingURL=transport.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vc2hhcmVkL3RyYW5zcG9ydC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLDJFQUEyRTtBQUNsSDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0Btb2RlbGNvbnRleHRwcm90b2NvbCtzZGtAMS4yOS4wX3pvZEAzLjI1Ljc2L25vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2Rpc3QvZXNtL3NoYXJlZC90cmFuc3BvcnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOb3JtYWxpemVzIEhlYWRlcnNJbml0IHRvIGEgcGxhaW4gUmVjb3JkPHN0cmluZywgc3RyaW5nPiBmb3IgbWFuaXB1bGF0aW9uLlxuICogSGFuZGxlcyBIZWFkZXJzIG9iamVjdHMsIGFycmF5cyBvZiB0dXBsZXMsIGFuZCBwbGFpbiBvYmplY3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgaWYgKCFoZWFkZXJzKVxuICAgICAgICByZXR1cm4ge307XG4gICAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoaGVhZGVycy5lbnRyaWVzKCkpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGhlYWRlcnMpO1xuICAgIH1cbiAgICByZXR1cm4geyAuLi5oZWFkZXJzIH07XG59XG4vKipcbiAqIENyZWF0ZXMgYSBmZXRjaCBmdW5jdGlvbiB0aGF0IGluY2x1ZGVzIGJhc2UgUmVxdWVzdEluaXQgb3B0aW9ucy5cbiAqIFRoaXMgZW5zdXJlcyByZXF1ZXN0cyBpbmhlcml0IHNldHRpbmdzIGxpa2UgY3JlZGVudGlhbHMsIG1vZGUsIGhlYWRlcnMsIGV0Yy4gZnJvbSB0aGUgYmFzZSBpbml0LlxuICpcbiAqIEBwYXJhbSBiYXNlRmV0Y2ggLSBUaGUgYmFzZSBmZXRjaCBmdW5jdGlvbiB0byB3cmFwIChkZWZhdWx0cyB0byBnbG9iYWwgZmV0Y2gpXG4gKiBAcGFyYW0gYmFzZUluaXQgLSBUaGUgYmFzZSBSZXF1ZXN0SW5pdCB0byBtZXJnZSB3aXRoIGVhY2ggcmVxdWVzdFxuICogQHJldHVybnMgQSB3cmFwcGVkIGZldGNoIGZ1bmN0aW9uIHRoYXQgbWVyZ2VzIGJhc2Ugb3B0aW9ucyB3aXRoIGNhbGwtc3BlY2lmaWMgb3B0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmV0Y2hXaXRoSW5pdChiYXNlRmV0Y2ggPSBmZXRjaCwgYmFzZUluaXQpIHtcbiAgICBpZiAoIWJhc2VJbml0KSB7XG4gICAgICAgIHJldHVybiBiYXNlRmV0Y2g7XG4gICAgfVxuICAgIC8vIFJldHVybiBhIHdyYXBwZWQgZmV0Y2ggdGhhdCBtZXJnZXMgYmFzZSBSZXF1ZXN0SW5pdCB3aXRoIGNhbGwtc3BlY2lmaWMgaW5pdFxuICAgIHJldHVybiBhc3luYyAodXJsLCBpbml0KSA9PiB7XG4gICAgICAgIGNvbnN0IG1lcmdlZEluaXQgPSB7XG4gICAgICAgICAgICAuLi5iYXNlSW5pdCxcbiAgICAgICAgICAgIC4uLmluaXQsXG4gICAgICAgICAgICAvLyBIZWFkZXJzIG5lZWQgc3BlY2lhbCBoYW5kbGluZyAtIG1lcmdlIGluc3RlYWQgb2YgcmVwbGFjZVxuICAgICAgICAgICAgaGVhZGVyczogaW5pdD8uaGVhZGVycyA/IHsgLi4ubm9ybWFsaXplSGVhZGVycyhiYXNlSW5pdC5oZWFkZXJzKSwgLi4ubm9ybWFsaXplSGVhZGVycyhpbml0LmhlYWRlcnMpIH0gOiBiYXNlSW5pdC5oZWFkZXJzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBiYXNlRmV0Y2godXJsLCBtZXJnZWRJbml0KTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhbnNwb3J0LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js":
/*!**********************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js ***!
\**********************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AnnotationsSchema: () => (/* binding */ AnnotationsSchema),\n/* harmony export */ AudioContentSchema: () => (/* binding */ AudioContentSchema),\n/* harmony export */ BaseMetadataSchema: () => (/* binding */ BaseMetadataSchema),\n/* harmony export */ BlobResourceContentsSchema: () => (/* binding */ BlobResourceContentsSchema),\n/* harmony export */ BooleanSchemaSchema: () => (/* binding */ BooleanSchemaSchema),\n/* harmony export */ CallToolRequestParamsSchema: () => (/* binding */ CallToolRequestParamsSchema),\n/* harmony export */ CallToolRequestSchema: () => (/* binding */ CallToolRequestSchema),\n/* harmony export */ CallToolResultSchema: () => (/* binding */ CallToolResultSchema),\n/* harmony export */ CancelTaskRequestSchema: () => (/* binding */ CancelTaskRequestSchema),\n/* harmony export */ CancelTaskResultSchema: () => (/* binding */ CancelTaskResultSchema),\n/* harmony export */ CancelledNotificationParamsSchema: () => (/* binding */ CancelledNotificationParamsSchema),\n/* harmony export */ CancelledNotificationSchema: () => (/* binding */ CancelledNotificationSchema),\n/* harmony export */ ClientCapabilitiesSchema: () => (/* binding */ ClientCapabilitiesSchema),\n/* harmony export */ ClientNotificationSchema: () => (/* binding */ ClientNotificationSchema),\n/* harmony export */ ClientRequestSchema: () => (/* binding */ ClientRequestSchema),\n/* harmony export */ ClientResultSchema: () => (/* binding */ ClientResultSchema),\n/* harmony export */ ClientTasksCapabilitySchema: () => (/* binding */ ClientTasksCapabilitySchema),\n/* harmony export */ CompatibilityCallToolResultSchema: () => (/* binding */ CompatibilityCallToolResultSchema),\n/* harmony export */ CompleteRequestParamsSchema: () => (/* binding */ CompleteRequestParamsSchema),\n/* harmony export */ CompleteRequestSchema: () => (/* binding */ CompleteRequestSchema),\n/* harmony export */ CompleteResultSchema: () => (/* binding */ CompleteResultSchema),\n/* harmony export */ ContentBlockSchema: () => (/* binding */ ContentBlockSchema),\n/* harmony export */ CreateMessageRequestParamsSchema: () => (/* binding */ CreateMessageRequestParamsSchema),\n/* harmony export */ CreateMessageRequestSchema: () => (/* binding */ CreateMessageRequestSchema),\n/* harmony export */ CreateMessageResultSchema: () => (/* binding */ CreateMessageResultSchema),\n/* harmony export */ CreateMessageResultWithToolsSchema: () => (/* binding */ CreateMessageResultWithToolsSchema),\n/* harmony export */ CreateTaskResultSchema: () => (/* binding */ CreateTaskResultSchema),\n/* harmony export */ CursorSchema: () => (/* binding */ CursorSchema),\n/* harmony export */ DEFAULT_NEGOTIATED_PROTOCOL_VERSION: () => (/* binding */ DEFAULT_NEGOTIATED_PROTOCOL_VERSION),\n/* harmony export */ ElicitRequestFormParamsSchema: () => (/* binding */ ElicitRequestFormParamsSchema),\n/* harmony export */ ElicitRequestParamsSchema: () => (/* binding */ ElicitRequestParamsSchema),\n/* harmony export */ ElicitRequestSchema: () => (/* binding */ ElicitRequestSchema),\n/* harmony export */ ElicitRequestURLParamsSchema: () => (/* binding */ ElicitRequestURLParamsSchema),\n/* harmony export */ ElicitResultSchema: () => (/* binding */ ElicitResultSchema),\n/* harmony export */ ElicitationCompleteNotificationParamsSchema: () => (/* binding */ ElicitationCompleteNotificationParamsSchema),\n/* harmony export */ ElicitationCompleteNotificationSchema: () => (/* binding */ ElicitationCompleteNotificationSchema),\n/* harmony export */ EmbeddedResourceSchema: () => (/* binding */ EmbeddedResourceSchema),\n/* harmony export */ EmptyResultSchema: () => (/* binding */ EmptyResultSchema),\n/* harmony export */ EnumSchemaSchema: () => (/* binding */ EnumSchemaSchema),\n/* harmony export */ ErrorCode: () => (/* binding */ ErrorCode),\n/* harmony export */ GetPromptRequestParamsSchema: () => (/* binding */ GetPromptRequestParamsSchema),\n/* harmony export */ GetPromptRequestSchema: () => (/* binding */ GetPromptRequestSchema),\n/* harmony export */ GetPromptResultSchema: () => (/* binding */ GetPromptResultSchema),\n/* harmony export */ GetTaskPayloadRequestSchema: () => (/* binding */ GetTaskPayloadRequestSchema),\n/* harmony export */ GetTaskPayloadResultSchema: () => (/* binding */ GetTaskPayloadResultSchema),\n/* harmony export */ GetTaskRequestSchema: () => (/* binding */ GetTaskRequestSchema),\n/* harmony export */ GetTaskResultSchema: () => (/* binding */ GetTaskResultSchema),\n/* harmony export */ IconSchema: () => (/* binding */ IconSchema),\n/* harmony export */ IconsSchema: () => (/* binding */ IconsSchema),\n/* harmony export */ ImageContentSchema: () => (/* binding */ ImageContentSchema),\n/* harmony export */ ImplementationSchema: () => (/* binding */ ImplementationSchema),\n/* harmony export */ InitializeRequestParamsSchema: () => (/* binding */ InitializeRequestParamsSchema),\n/* harmony export */ InitializeRequestSchema: () => (/* binding */ InitializeRequestSchema),\n/* harmony export */ InitializeResultSchema: () => (/* binding */ InitializeResultSchema),\n/* harmony export */ InitializedNotificationSchema: () => (/* binding */ InitializedNotificationSchema),\n/* harmony export */ JSONRPCErrorResponseSchema: () => (/* binding */ JSONRPCErrorResponseSchema),\n/* harmony export */ JSONRPCErrorSchema: () => (/* binding */ JSONRPCErrorSchema),\n/* harmony export */ JSONRPCMessageSchema: () => (/* binding */ JSONRPCMessageSchema),\n/* harmony export */ JSONRPCNotificationSchema: () => (/* binding */ JSONRPCNotificationSchema),\n/* harmony export */ JSONRPCRequestSchema: () => (/* binding */ JSONRPCRequestSchema),\n/* harmony export */ JSONRPCResponseSchema: () => (/* binding */ JSONRPCResponseSchema),\n/* harmony export */ JSONRPCResultResponseSchema: () => (/* binding */ JSONRPCResultResponseSchema),\n/* harmony export */ JSONRPC_VERSION: () => (/* binding */ JSONRPC_VERSION),\n/* harmony export */ LATEST_PROTOCOL_VERSION: () => (/* binding */ LATEST_PROTOCOL_VERSION),\n/* harmony export */ LegacyTitledEnumSchemaSchema: () => (/* binding */ LegacyTitledEnumSchemaSchema),\n/* harmony export */ ListChangedOptionsBaseSchema: () => (/* binding */ ListChangedOptionsBaseSchema),\n/* harmony export */ ListPromptsRequestSchema: () => (/* binding */ ListPromptsRequestSchema),\n/* harmony export */ ListPromptsResultSchema: () => (/* binding */ ListPromptsResultSchema),\n/* harmony export */ ListResourceTemplatesRequestSchema: () => (/* binding */ ListResourceTemplatesRequestSchema),\n/* harmony export */ ListResourceTemplatesResultSchema: () => (/* binding */ ListResourceTemplatesResultSchema),\n/* harmony export */ ListResourcesRequestSchema: () => (/* binding */ ListResourcesRequestSchema),\n/* harmony export */ ListResourcesResultSchema: () => (/* binding */ ListResourcesResultSchema),\n/* harmony export */ ListRootsRequestSchema: () => (/* binding */ ListRootsRequestSchema),\n/* harmony export */ ListRootsResultSchema: () => (/* binding */ ListRootsResultSchema),\n/* harmony export */ ListTasksRequestSchema: () => (/* binding */ ListTasksRequestSchema),\n/* harmony export */ ListTasksResultSchema: () => (/* binding */ ListTasksResultSchema),\n/* harmony export */ ListToolsRequestSchema: () => (/* binding */ ListToolsRequestSchema),\n/* harmony export */ ListToolsResultSchema: () => (/* binding */ ListToolsResultSchema),\n/* harmony export */ LoggingLevelSchema: () => (/* binding */ LoggingLevelSchema),\n/* harmony export */ LoggingMessageNotificationParamsSchema: () => (/* binding */ LoggingMessageNotificationParamsSchema),\n/* harmony export */ LoggingMessageNotificationSchema: () => (/* binding */ LoggingMessageNotificationSchema),\n/* harmony export */ McpError: () => (/* binding */ McpError),\n/* harmony export */ ModelHintSchema: () => (/* binding */ ModelHintSchema),\n/* harmony export */ ModelPreferencesSchema: () => (/* binding */ ModelPreferencesSchema),\n/* harmony export */ MultiSelectEnumSchemaSchema: () => (/* binding */ MultiSelectEnumSchemaSchema),\n/* harmony export */ NotificationSchema: () => (/* binding */ NotificationSchema),\n/* harmony export */ NumberSchemaSchema: () => (/* binding */ NumberSchemaSchema),\n/* harmony export */ PaginatedRequestParamsSchema: () => (/* binding */ PaginatedRequestParamsSchema),\n/* harmony export */ PaginatedRequestSchema: () => (/* binding */ PaginatedRequestSchema),\n/* harmony export */ PaginatedResultSchema: () => (/* binding */ PaginatedResultSchema),\n/* harmony export */ PingRequestSchema: () => (/* binding */ PingRequestSchema),\n/* harmony export */ PrimitiveSchemaDefinitionSchema: () => (/* binding */ PrimitiveSchemaDefinitionSchema),\n/* harmony export */ ProgressNotificationParamsSchema: () => (/* binding */ ProgressNotificationParamsSchema),\n/* harmony export */ ProgressNotificationSchema: () => (/* binding */ ProgressNotificationSchema),\n/* harmony export */ ProgressSchema: () => (/* binding */ ProgressSchema),\n/* harmony export */ ProgressTokenSchema: () => (/* binding */ ProgressTokenSchema),\n/* harmony export */ PromptArgumentSchema: () => (/* binding */ PromptArgumentSchema),\n/* harmony export */ PromptListChangedNotificationSchema: () => (/* binding */ PromptListChangedNotificationSchema),\n/* harmony export */ PromptMessageSchema: () => (/* binding */ PromptMessageSchema),\n/* harmony export */ PromptReferenceSchema: () => (/* binding */ PromptReferenceSchema),\n/* harmony export */ PromptSchema: () => (/* binding */ PromptSchema),\n/* harmony export */ RELATED_TASK_META_KEY: () => (/* binding */ RELATED_TASK_META_KEY),\n/* harmony export */ ReadResourceRequestParamsSchema: () => (/* binding */ ReadResourceRequestParamsSchema),\n/* harmony export */ ReadResourceRequestSchema: () => (/* binding */ ReadResourceRequestSchema),\n/* harmony export */ ReadResourceResultSchema: () => (/* binding */ ReadResourceResultSchema),\n/* harmony export */ RelatedTaskMetadataSchema: () => (/* binding */ RelatedTaskMetadataSchema),\n/* harmony export */ RequestIdSchema: () => (/* binding */ RequestIdSchema),\n/* harmony export */ RequestSchema: () => (/* binding */ RequestSchema),\n/* harmony export */ ResourceContentsSchema: () => (/* binding */ ResourceContentsSchema),\n/* harmony export */ ResourceLinkSchema: () => (/* binding */ ResourceLinkSchema),\n/* harmony export */ ResourceListChangedNotificationSchema: () => (/* binding */ ResourceListChangedNotificationSchema),\n/* harmony export */ ResourceReferenceSchema: () => (/* binding */ ResourceReferenceSchema),\n/* harmony export */ ResourceRequestParamsSchema: () => (/* binding */ ResourceRequestParamsSchema),\n/* harmony export */ ResourceSchema: () => (/* binding */ ResourceSchema),\n/* harmony export */ ResourceTemplateReferenceSchema: () => (/* binding */ ResourceTemplateReferenceSchema),\n/* harmony export */ ResourceTemplateSchema: () => (/* binding */ ResourceTemplateSchema),\n/* harmony export */ ResourceUpdatedNotificationParamsSchema: () => (/* binding */ ResourceUpdatedNotificationParamsSchema),\n/* harmony export */ ResourceUpdatedNotificationSchema: () => (/* binding */ ResourceUpdatedNotificationSchema),\n/* harmony export */ ResultSchema: () => (/* binding */ ResultSchema),\n/* harmony export */ RoleSchema: () => (/* binding */ RoleSchema),\n/* harmony export */ RootSchema: () => (/* binding */ RootSchema),\n/* harmony export */ RootsListChangedNotificationSchema: () => (/* binding */ RootsListChangedNotificationSchema),\n/* harmony export */ SUPPORTED_PROTOCOL_VERSIONS: () => (/* binding */ SUPPORTED_PROTOCOL_VERSIONS),\n/* harmony export */ SamplingContentSchema: () => (/* binding */ SamplingContentSchema),\n/* harmony export */ SamplingMessageContentBlockSchema: () => (/* binding */ SamplingMessageContentBlockSchema),\n/* harmony export */ SamplingMessageSchema: () => (/* binding */ SamplingMessageSchema),\n/* harmony export */ ServerCapabilitiesSchema: () => (/* binding */ ServerCapabilitiesSchema),\n/* harmony export */ ServerNotificationSchema: () => (/* binding */ ServerNotificationSchema),\n/* harmony export */ ServerRequestSchema: () => (/* binding */ ServerRequestSchema),\n/* harmony export */ ServerResultSchema: () => (/* binding */ ServerResultSchema),\n/* harmony export */ ServerTasksCapabilitySchema: () => (/* binding */ ServerTasksCapabilitySchema),\n/* harmony export */ SetLevelRequestParamsSchema: () => (/* binding */ SetLevelRequestParamsSchema),\n/* harmony export */ SetLevelRequestSchema: () => (/* binding */ SetLevelRequestSchema),\n/* harmony export */ SingleSelectEnumSchemaSchema: () => (/* binding */ SingleSelectEnumSchemaSchema),\n/* harmony export */ StringSchemaSchema: () => (/* binding */ StringSchemaSchema),\n/* harmony export */ SubscribeRequestParamsSchema: () => (/* binding */ SubscribeRequestParamsSchema),\n/* harmony export */ SubscribeRequestSchema: () => (/* binding */ SubscribeRequestSchema),\n/* harmony export */ TaskAugmentedRequestParamsSchema: () => (/* binding */ TaskAugmentedRequestParamsSchema),\n/* harmony export */ TaskCreationParamsSchema: () => (/* binding */ TaskCreationParamsSchema),\n/* harmony export */ TaskMetadataSchema: () => (/* binding */ TaskMetadataSchema),\n/* harmony export */ TaskSchema: () => (/* binding */ TaskSchema),\n/* harmony export */ TaskStatusNotificationParamsSchema: () => (/* binding */ TaskStatusNotificationParamsSchema),\n/* harmony export */ TaskStatusNotificationSchema: () => (/* binding */ TaskStatusNotificationSchema),\n/* harmony export */ TaskStatusSchema: () => (/* binding */ TaskStatusSchema),\n/* harmony export */ TextContentSchema: () => (/* binding */ TextContentSchema),\n/* harmony export */ TextResourceContentsSchema: () => (/* binding */ TextResourceContentsSchema),\n/* harmony export */ TitledMultiSelectEnumSchemaSchema: () => (/* binding */ TitledMultiSelectEnumSchemaSchema),\n/* harmony export */ TitledSingleSelectEnumSchemaSchema: () => (/* binding */ TitledSingleSelectEnumSchemaSchema),\n/* harmony export */ ToolAnnotationsSchema: () => (/* binding */ ToolAnnotationsSchema),\n/* harmony export */ ToolChoiceSchema: () => (/* binding */ ToolChoiceSchema),\n/* harmony export */ ToolExecutionSchema: () => (/* binding */ ToolExecutionSchema),\n/* harmony export */ ToolListChangedNotificationSchema: () => (/* binding */ ToolListChangedNotificationSchema),\n/* harmony export */ ToolResultContentSchema: () => (/* binding */ ToolResultContentSchema),\n/* harmony export */ ToolSchema: () => (/* binding */ ToolSchema),\n/* harmony export */ ToolUseContentSchema: () => (/* binding */ ToolUseContentSchema),\n/* harmony export */ UnsubscribeRequestParamsSchema: () => (/* binding */ UnsubscribeRequestParamsSchema),\n/* harmony export */ UnsubscribeRequestSchema: () => (/* binding */ UnsubscribeRequestSchema),\n/* harmony export */ UntitledMultiSelectEnumSchemaSchema: () => (/* binding */ UntitledMultiSelectEnumSchemaSchema),\n/* harmony export */ UntitledSingleSelectEnumSchemaSchema: () => (/* binding */ UntitledSingleSelectEnumSchemaSchema),\n/* harmony export */ UrlElicitationRequiredError: () => (/* binding */ UrlElicitationRequiredError),\n/* harmony export */ assertCompleteRequestPrompt: () => (/* binding */ assertCompleteRequestPrompt),\n/* harmony export */ assertCompleteRequestResourceTemplate: () => (/* binding */ assertCompleteRequestResourceTemplate),\n/* harmony export */ isInitializeRequest: () => (/* binding */ isInitializeRequest),\n/* harmony export */ isInitializedNotification: () => (/* binding */ isInitializedNotification),\n/* harmony export */ isJSONRPCError: () => (/* binding */ isJSONRPCError),\n/* harmony export */ isJSONRPCErrorResponse: () => (/* binding */ isJSONRPCErrorResponse),\n/* harmony export */ isJSONRPCNotification: () => (/* binding */ isJSONRPCNotification),\n/* harmony export */ isJSONRPCRequest: () => (/* binding */ isJSONRPCRequest),\n/* harmony export */ isJSONRPCResponse: () => (/* binding */ isJSONRPCResponse),\n/* harmony export */ isJSONRPCResultResponse: () => (/* binding */ isJSONRPCResultResponse),\n/* harmony export */ isTaskAugmentedRequestParams: () => (/* binding */ isTaskAugmentedRequestParams)\n/* harmony export */ });\n/* harmony import */ var zod_v4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zod/v4 */ \"(rsc)/./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/schemas.js\");\n/* harmony import */ var zod_v4__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zod/v4 */ \"(rsc)/./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/classic/iso.js\");\n\nconst LATEST_PROTOCOL_VERSION = '2025-11-25';\nconst DEFAULT_NEGOTIATED_PROTOCOL_VERSION = '2025-03-26';\nconst SUPPORTED_PROTOCOL_VERSIONS = [LATEST_PROTOCOL_VERSION, '2025-06-18', '2025-03-26', '2024-11-05', '2024-10-07'];\nconst RELATED_TASK_META_KEY = 'io.modelcontextprotocol/related-task';\n/* JSON-RPC types */\nconst JSONRPC_VERSION = '2.0';\n/**\n * Assert 'object' type schema.\n *\n * @internal\n */\nconst AssertObjectSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.custom((v) => v !== null && (typeof v === 'object' || typeof v === 'function'));\n/**\n * A progress token, used to associate progress notifications with the original request.\n */\nconst ProgressTokenSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().int()]);\n/**\n * An opaque token used to represent a cursor for pagination.\n */\nconst CursorSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.string();\n/**\n * Task creation parameters, used to ask that the server create a task to represent a request.\n */\nconst TaskCreationParamsSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({\n /**\n * Requested duration in milliseconds to retain task from creation.\n */\n ttl: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional(),\n /**\n * Time in milliseconds to wait between task status requests.\n */\n pollInterval: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional()\n});\nconst TaskMetadataSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n ttl: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional()\n});\n/**\n * Metadata for associating messages with a task.\n * Include this in the `_meta` field under the key `io.modelcontextprotocol/related-task`.\n */\nconst RelatedTaskMetadataSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n taskId: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()\n});\nconst RequestMetaSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({\n /**\n * If specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications.\n */\n progressToken: ProgressTokenSchema.optional(),\n /**\n * If specified, this request is related to the provided task.\n */\n [RELATED_TASK_META_KEY]: RelatedTaskMetadataSchema.optional()\n});\n/**\n * Common params for any request.\n */\nconst BaseRequestParamsSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * See [General fields: `_meta`](/specification/draft/basic/index#meta) for notes on `_meta` usage.\n */\n _meta: RequestMetaSchema.optional()\n});\n/**\n * Common params for any task-augmented request.\n */\nconst TaskAugmentedRequestParamsSchema = BaseRequestParamsSchema.extend({\n /**\n * If specified, the caller is requesting task-augmented execution for this request.\n * The request will return a CreateTaskResult immediately, and the actual result can be\n * retrieved later via tasks/result.\n *\n * Task augmentation is subject to capability negotiation - receivers MUST declare support\n * for task augmentation of specific request types in their capabilities.\n */\n task: TaskMetadataSchema.optional()\n});\n/**\n * Checks if a value is a valid TaskAugmentedRequestParams.\n * @param value - The value to check.\n *\n * @returns True if the value is a valid TaskAugmentedRequestParams, false otherwise.\n */\nconst isTaskAugmentedRequestParams = (value) => TaskAugmentedRequestParamsSchema.safeParse(value).success;\nconst RequestSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n params: BaseRequestParamsSchema.loose().optional()\n});\nconst NotificationsParamsSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: RequestMetaSchema.optional()\n});\nconst NotificationSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n params: NotificationsParamsSchema.loose().optional()\n});\nconst ResultSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: RequestMetaSchema.optional()\n});\n/**\n * A uniquely identifying ID for a request in JSON-RPC.\n */\nconst RequestIdSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().int()]);\n/**\n * A request that expects a response.\n */\nconst JSONRPCRequestSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n jsonrpc: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal(JSONRPC_VERSION),\n id: RequestIdSchema,\n ...RequestSchema.shape\n})\n .strict();\nconst isJSONRPCRequest = (value) => JSONRPCRequestSchema.safeParse(value).success;\n/**\n * A notification which does not expect a response.\n */\nconst JSONRPCNotificationSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n jsonrpc: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal(JSONRPC_VERSION),\n ...NotificationSchema.shape\n})\n .strict();\nconst isJSONRPCNotification = (value) => JSONRPCNotificationSchema.safeParse(value).success;\n/**\n * A successful (non-error) response to a request.\n */\nconst JSONRPCResultResponseSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n jsonrpc: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal(JSONRPC_VERSION),\n id: RequestIdSchema,\n result: ResultSchema\n})\n .strict();\n/**\n * Checks if a value is a valid JSONRPCResultResponse.\n * @param value - The value to check.\n *\n * @returns True if the value is a valid JSONRPCResultResponse, false otherwise.\n */\nconst isJSONRPCResultResponse = (value) => JSONRPCResultResponseSchema.safeParse(value).success;\n/**\n * @deprecated Use {@link isJSONRPCResultResponse} instead.\n *\n * Please note that {@link JSONRPCResponse} is a union of {@link JSONRPCResultResponse} and {@link JSONRPCErrorResponse} as per the updated JSON-RPC specification. (was previously just {@link JSONRPCResultResponse})\n */\nconst isJSONRPCResponse = isJSONRPCResultResponse;\n/**\n * Error codes defined by the JSON-RPC specification.\n */\nvar ErrorCode;\n(function (ErrorCode) {\n // SDK error codes\n ErrorCode[ErrorCode[\"ConnectionClosed\"] = -32000] = \"ConnectionClosed\";\n ErrorCode[ErrorCode[\"RequestTimeout\"] = -32001] = \"RequestTimeout\";\n // Standard JSON-RPC error codes\n ErrorCode[ErrorCode[\"ParseError\"] = -32700] = \"ParseError\";\n ErrorCode[ErrorCode[\"InvalidRequest\"] = -32600] = \"InvalidRequest\";\n ErrorCode[ErrorCode[\"MethodNotFound\"] = -32601] = \"MethodNotFound\";\n ErrorCode[ErrorCode[\"InvalidParams\"] = -32602] = \"InvalidParams\";\n ErrorCode[ErrorCode[\"InternalError\"] = -32603] = \"InternalError\";\n // MCP-specific error codes\n ErrorCode[ErrorCode[\"UrlElicitationRequired\"] = -32042] = \"UrlElicitationRequired\";\n})(ErrorCode || (ErrorCode = {}));\n/**\n * A response to a request that indicates an error occurred.\n */\nconst JSONRPCErrorResponseSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n jsonrpc: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal(JSONRPC_VERSION),\n id: RequestIdSchema.optional(),\n error: zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * The error type that occurred.\n */\n code: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().int(),\n /**\n * A short description of the error. The message SHOULD be limited to a concise single sentence.\n */\n message: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * Additional information about the error. The value of this member is defined by the sender (e.g. detailed error information, nested errors etc.).\n */\n data: zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown().optional()\n })\n})\n .strict();\n/**\n * @deprecated Use {@link JSONRPCErrorResponseSchema} instead.\n */\nconst JSONRPCErrorSchema = JSONRPCErrorResponseSchema;\n/**\n * Checks if a value is a valid JSONRPCErrorResponse.\n * @param value - The value to check.\n *\n * @returns True if the value is a valid JSONRPCErrorResponse, false otherwise.\n */\nconst isJSONRPCErrorResponse = (value) => JSONRPCErrorResponseSchema.safeParse(value).success;\n/**\n * @deprecated Use {@link isJSONRPCErrorResponse} instead.\n */\nconst isJSONRPCError = isJSONRPCErrorResponse;\nconst JSONRPCMessageSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([\n JSONRPCRequestSchema,\n JSONRPCNotificationSchema,\n JSONRPCResultResponseSchema,\n JSONRPCErrorResponseSchema\n]);\nconst JSONRPCResponseSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([JSONRPCResultResponseSchema, JSONRPCErrorResponseSchema]);\n/* Empty result */\n/**\n * A response that indicates success but carries no data.\n */\nconst EmptyResultSchema = ResultSchema.strict();\nconst CancelledNotificationParamsSchema = NotificationsParamsSchema.extend({\n /**\n * The ID of the request to cancel.\n *\n * This MUST correspond to the ID of a request previously issued in the same direction.\n */\n requestId: RequestIdSchema.optional(),\n /**\n * An optional string describing the reason for the cancellation. This MAY be logged or presented to the user.\n */\n reason: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional()\n});\n/* Cancellation */\n/**\n * This notification can be sent by either side to indicate that it is cancelling a previously-issued request.\n *\n * The request SHOULD still be in-flight, but due to communication latency, it is always possible that this notification MAY arrive after the request has already finished.\n *\n * This notification indicates that the result will be unused, so any associated processing SHOULD cease.\n *\n * A client MUST NOT attempt to cancel its `initialize` request.\n */\nconst CancelledNotificationSchema = NotificationSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('notifications/cancelled'),\n params: CancelledNotificationParamsSchema\n});\n/* Base Metadata */\n/**\n * Icon schema for use in tools, prompts, resources, and implementations.\n */\nconst IconSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * URL or data URI for the icon.\n */\n src: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * Optional MIME type for the icon.\n */\n mimeType: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n /**\n * Optional array of strings that specify sizes at which the icon can be used.\n * Each string should be in WxH format (e.g., `\"48x48\"`, `\"96x96\"`) or `\"any\"` for scalable formats like SVG.\n *\n * If not provided, the client should assume that the icon can be used at any size.\n */\n sizes: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n /**\n * Optional specifier for the theme this icon is designed for. `light` indicates\n * the icon is designed to be used with a light background, and `dark` indicates\n * the icon is designed to be used with a dark background.\n *\n * If not provided, the client should assume the icon can be used with any theme.\n */\n theme: zod_v4__WEBPACK_IMPORTED_MODULE_0__[\"enum\"](['light', 'dark']).optional()\n});\n/**\n * Base schema to add `icons` property.\n *\n */\nconst IconsSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * Optional set of sized icons that the client can display in a user interface.\n *\n * Clients that support rendering icons MUST support at least the following MIME types:\n * - `image/png` - PNG images (safe, universal compatibility)\n * - `image/jpeg` (and `image/jpg`) - JPEG images (safe, universal compatibility)\n *\n * Clients that support rendering icons SHOULD also support:\n * - `image/svg+xml` - SVG images (scalable but requires security precautions)\n * - `image/webp` - WebP images (modern, efficient format)\n */\n icons: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(IconSchema).optional()\n});\n/**\n * Base metadata interface for common properties across resources, tools, prompts, and implementations.\n */\nconst BaseMetadataSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /** Intended for programmatic or logical use, but used as a display name in past specs or fallback */\n name: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * Intended for UI and end-user contexts — optimized to be human-readable and easily understood,\n * even by those unfamiliar with domain-specific terminology.\n *\n * If not provided, the name should be used for display (except for Tool,\n * where `annotations.title` should be given precedence over using `name`,\n * if present).\n */\n title: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional()\n});\n/* Initialization */\n/**\n * Describes the name and version of an MCP implementation.\n */\nconst ImplementationSchema = BaseMetadataSchema.extend({\n ...BaseMetadataSchema.shape,\n ...IconsSchema.shape,\n version: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * An optional URL of the website for this implementation.\n */\n websiteUrl: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n /**\n * An optional human-readable description of what this implementation does.\n *\n * This can be used by clients or servers to provide context about their purpose\n * and capabilities. For example, a server might describe the types of resources\n * or tools it provides, while a client might describe its intended use case.\n */\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional()\n});\nconst FormElicitationCapabilitySchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.intersection(zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n applyDefaults: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional()\n}), zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()));\nconst ElicitationCapabilitySchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.preprocess(value => {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n if (Object.keys(value).length === 0) {\n return { form: {} };\n }\n }\n return value;\n}, zod_v4__WEBPACK_IMPORTED_MODULE_0__.intersection(zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n form: FormElicitationCapabilitySchema.optional(),\n url: AssertObjectSchema.optional()\n}), zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()).optional()));\n/**\n * Task capabilities for clients, indicating which request types support task creation.\n */\nconst ClientTasksCapabilitySchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({\n /**\n * Present if the client supports listing tasks.\n */\n list: AssertObjectSchema.optional(),\n /**\n * Present if the client supports cancelling tasks.\n */\n cancel: AssertObjectSchema.optional(),\n /**\n * Capabilities for task creation on specific request types.\n */\n requests: zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({\n /**\n * Task support for sampling requests.\n */\n sampling: zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({\n createMessage: AssertObjectSchema.optional()\n })\n .optional(),\n /**\n * Task support for elicitation requests.\n */\n elicitation: zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({\n create: AssertObjectSchema.optional()\n })\n .optional()\n })\n .optional()\n});\n/**\n * Task capabilities for servers, indicating which request types support task creation.\n */\nconst ServerTasksCapabilitySchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({\n /**\n * Present if the server supports listing tasks.\n */\n list: AssertObjectSchema.optional(),\n /**\n * Present if the server supports cancelling tasks.\n */\n cancel: AssertObjectSchema.optional(),\n /**\n * Capabilities for task creation on specific request types.\n */\n requests: zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({\n /**\n * Task support for tool requests.\n */\n tools: zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({\n call: AssertObjectSchema.optional()\n })\n .optional()\n })\n .optional()\n});\n/**\n * Capabilities a client may support. Known capabilities are defined here, in this schema, but this is not a closed set: any client can define its own, additional capabilities.\n */\nconst ClientCapabilitiesSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * Experimental, non-standard capabilities that the client supports.\n */\n experimental: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), AssertObjectSchema).optional(),\n /**\n * Present if the client supports sampling from an LLM.\n */\n sampling: zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * Present if the client supports context inclusion via includeContext parameter.\n * If not declared, servers SHOULD only use `includeContext: \"none\"` (or omit it).\n */\n context: AssertObjectSchema.optional(),\n /**\n * Present if the client supports tool use via tools and toolChoice parameters.\n */\n tools: AssertObjectSchema.optional()\n })\n .optional(),\n /**\n * Present if the client supports eliciting user input.\n */\n elicitation: ElicitationCapabilitySchema.optional(),\n /**\n * Present if the client supports listing roots.\n */\n roots: zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * Whether the client supports issuing notifications for changes to the roots list.\n */\n listChanged: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional()\n })\n .optional(),\n /**\n * Present if the client supports task creation.\n */\n tasks: ClientTasksCapabilitySchema.optional(),\n /**\n * Extensions that the client supports. Keys are extension identifiers (vendor-prefix/extension-name).\n */\n extensions: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), AssertObjectSchema).optional()\n});\nconst InitializeRequestParamsSchema = BaseRequestParamsSchema.extend({\n /**\n * The latest version of the Model Context Protocol that the client supports. The client MAY decide to support older versions as well.\n */\n protocolVersion: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n capabilities: ClientCapabilitiesSchema,\n clientInfo: ImplementationSchema\n});\n/**\n * This request is sent from the client to the server when it first connects, asking it to begin initialization.\n */\nconst InitializeRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('initialize'),\n params: InitializeRequestParamsSchema\n});\nconst isInitializeRequest = (value) => InitializeRequestSchema.safeParse(value).success;\n/**\n * Capabilities that a server may support. Known capabilities are defined here, in this schema, but this is not a closed set: any server can define its own, additional capabilities.\n */\nconst ServerCapabilitiesSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * Experimental, non-standard capabilities that the server supports.\n */\n experimental: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), AssertObjectSchema).optional(),\n /**\n * Present if the server supports sending log messages to the client.\n */\n logging: AssertObjectSchema.optional(),\n /**\n * Present if the server supports sending completions to the client.\n */\n completions: AssertObjectSchema.optional(),\n /**\n * Present if the server offers any prompt templates.\n */\n prompts: zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * Whether this server supports issuing notifications for changes to the prompt list.\n */\n listChanged: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional()\n })\n .optional(),\n /**\n * Present if the server offers any resources to read.\n */\n resources: zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * Whether this server supports clients subscribing to resource updates.\n */\n subscribe: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional(),\n /**\n * Whether this server supports issuing notifications for changes to the resource list.\n */\n listChanged: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional()\n })\n .optional(),\n /**\n * Present if the server offers any tools to call.\n */\n tools: zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * Whether this server supports issuing notifications for changes to the tool list.\n */\n listChanged: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional()\n })\n .optional(),\n /**\n * Present if the server supports task creation.\n */\n tasks: ServerTasksCapabilitySchema.optional(),\n /**\n * Extensions that the server supports. Keys are extension identifiers (vendor-prefix/extension-name).\n */\n extensions: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), AssertObjectSchema).optional()\n});\n/**\n * After receiving an initialize request from the client, the server sends this response.\n */\nconst InitializeResultSchema = ResultSchema.extend({\n /**\n * The version of the Model Context Protocol that the server wants to use. This may not match the version that the client requested. If the client cannot support this version, it MUST disconnect.\n */\n protocolVersion: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n capabilities: ServerCapabilitiesSchema,\n serverInfo: ImplementationSchema,\n /**\n * Instructions describing how to use the server and its features.\n *\n * This can be used by clients to improve the LLM's understanding of available tools, resources, etc. It can be thought of like a \"hint\" to the model. For example, this information MAY be added to the system prompt.\n */\n instructions: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional()\n});\n/**\n * This notification is sent from the client to the server after initialization has finished.\n */\nconst InitializedNotificationSchema = NotificationSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('notifications/initialized'),\n params: NotificationsParamsSchema.optional()\n});\nconst isInitializedNotification = (value) => InitializedNotificationSchema.safeParse(value).success;\n/* Ping */\n/**\n * A ping, issued by either the server or the client, to check that the other party is still alive. The receiver must promptly respond, or else may be disconnected.\n */\nconst PingRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('ping'),\n params: BaseRequestParamsSchema.optional()\n});\n/* Progress notifications */\nconst ProgressSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * The progress thus far. This should increase every time progress is made, even if the total is unknown.\n */\n progress: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number(),\n /**\n * Total number of items to process (or total progress required), if known.\n */\n total: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.number()),\n /**\n * An optional message describing the current progress.\n */\n message: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string())\n});\nconst ProgressNotificationParamsSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n ...NotificationsParamsSchema.shape,\n ...ProgressSchema.shape,\n /**\n * The progress token which was given in the initial request, used to associate this notification with the request that is proceeding.\n */\n progressToken: ProgressTokenSchema\n});\n/**\n * An out-of-band notification used to inform the receiver of a progress update for a long-running request.\n *\n * @category notifications/progress\n */\nconst ProgressNotificationSchema = NotificationSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('notifications/progress'),\n params: ProgressNotificationParamsSchema\n});\nconst PaginatedRequestParamsSchema = BaseRequestParamsSchema.extend({\n /**\n * An opaque token representing the current pagination position.\n * If provided, the server should return results starting after this cursor.\n */\n cursor: CursorSchema.optional()\n});\n/* Pagination */\nconst PaginatedRequestSchema = RequestSchema.extend({\n params: PaginatedRequestParamsSchema.optional()\n});\nconst PaginatedResultSchema = ResultSchema.extend({\n /**\n * An opaque token representing the pagination position after the last returned result.\n * If present, there may be more results available.\n */\n nextCursor: CursorSchema.optional()\n});\n/**\n * The status of a task.\n * */\nconst TaskStatusSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__[\"enum\"](['working', 'input_required', 'completed', 'failed', 'cancelled']);\n/* Tasks */\n/**\n * A pollable state object associated with a request.\n */\nconst TaskSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n taskId: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n status: TaskStatusSchema,\n /**\n * Time in milliseconds to keep task results available after completion.\n * If null, the task has unlimited lifetime until manually cleaned up.\n */\n ttl: zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([zod_v4__WEBPACK_IMPORTED_MODULE_0__.number(), zod_v4__WEBPACK_IMPORTED_MODULE_0__[\"null\"]()]),\n /**\n * ISO 8601 timestamp when the task was created.\n */\n createdAt: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * ISO 8601 timestamp when the task was last updated.\n */\n lastUpdatedAt: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n pollInterval: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.number()),\n /**\n * Optional diagnostic message for failed tasks or other status information.\n */\n statusMessage: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string())\n});\n/**\n * Result returned when a task is created, containing the task data wrapped in a task field.\n */\nconst CreateTaskResultSchema = ResultSchema.extend({\n task: TaskSchema\n});\n/**\n * Parameters for task status notification.\n */\nconst TaskStatusNotificationParamsSchema = NotificationsParamsSchema.merge(TaskSchema);\n/**\n * A notification sent when a task's status changes.\n */\nconst TaskStatusNotificationSchema = NotificationSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('notifications/tasks/status'),\n params: TaskStatusNotificationParamsSchema\n});\n/**\n * A request to get the state of a specific task.\n */\nconst GetTaskRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('tasks/get'),\n params: BaseRequestParamsSchema.extend({\n taskId: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()\n })\n});\n/**\n * The response to a tasks/get request.\n */\nconst GetTaskResultSchema = ResultSchema.merge(TaskSchema);\n/**\n * A request to get the result of a specific task.\n */\nconst GetTaskPayloadRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('tasks/result'),\n params: BaseRequestParamsSchema.extend({\n taskId: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()\n })\n});\n/**\n * The response to a tasks/result request.\n * The structure matches the result type of the original request.\n * For example, a tools/call task would return the CallToolResult structure.\n *\n */\nconst GetTaskPayloadResultSchema = ResultSchema.loose();\n/**\n * A request to list tasks.\n */\nconst ListTasksRequestSchema = PaginatedRequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('tasks/list')\n});\n/**\n * The response to a tasks/list request.\n */\nconst ListTasksResultSchema = PaginatedResultSchema.extend({\n tasks: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(TaskSchema)\n});\n/**\n * A request to cancel a specific task.\n */\nconst CancelTaskRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('tasks/cancel'),\n params: BaseRequestParamsSchema.extend({\n taskId: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()\n })\n});\n/**\n * The response to a tasks/cancel request.\n */\nconst CancelTaskResultSchema = ResultSchema.merge(TaskSchema);\n/* Resources */\n/**\n * The contents of a specific resource or sub-resource.\n */\nconst ResourceContentsSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * The URI of this resource.\n */\n uri: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * The MIME type of this resource, if known.\n */\n mimeType: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()),\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()).optional()\n});\nconst TextResourceContentsSchema = ResourceContentsSchema.extend({\n /**\n * The text of the item. This must only be set if the item can actually be represented as text (not binary data).\n */\n text: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()\n});\n/**\n * A Zod schema for validating Base64 strings that is more performant and\n * robust for very large inputs than the default regex-based check. It avoids\n * stack overflows by using the native `atob` function for validation.\n */\nconst Base64Schema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().refine(val => {\n try {\n // atob throws a DOMException if the string contains characters\n // that are not part of the Base64 character set.\n atob(val);\n return true;\n }\n catch {\n return false;\n }\n}, { message: 'Invalid Base64 string' });\nconst BlobResourceContentsSchema = ResourceContentsSchema.extend({\n /**\n * A base64-encoded string representing the binary data of the item.\n */\n blob: Base64Schema\n});\n/**\n * The sender or recipient of messages and data in a conversation.\n */\nconst RoleSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__[\"enum\"](['user', 'assistant']);\n/**\n * Optional annotations providing clients additional context about a resource.\n */\nconst AnnotationsSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * Intended audience(s) for the resource.\n */\n audience: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(RoleSchema).optional(),\n /**\n * Importance hint for the resource, from 0 (least) to 1 (most).\n */\n priority: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().min(0).max(1).optional(),\n /**\n * ISO 8601 timestamp for the most recent modification.\n */\n lastModified: zod_v4__WEBPACK_IMPORTED_MODULE_1__.datetime({ offset: true }).optional()\n});\n/**\n * A known resource that the server is capable of reading.\n */\nconst ResourceSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n ...BaseMetadataSchema.shape,\n ...IconsSchema.shape,\n /**\n * The URI of this resource.\n */\n uri: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * A description of what this resource represents.\n *\n * This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a \"hint\" to the model.\n */\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()),\n /**\n * The MIME type of this resource, if known.\n */\n mimeType: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()),\n /**\n * The size of the raw resource content, in bytes (i.e., before base64 encoding or any tokenization), if known.\n *\n * This can be used by Hosts to display file sizes and estimate context window usage.\n */\n size: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.number()),\n /**\n * Optional annotations for the client.\n */\n annotations: AnnotationsSchema.optional(),\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({}))\n});\n/**\n * A template description for resources available on the server.\n */\nconst ResourceTemplateSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n ...BaseMetadataSchema.shape,\n ...IconsSchema.shape,\n /**\n * A URI template (according to RFC 6570) that can be used to construct resource URIs.\n */\n uriTemplate: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * A description of what this template is for.\n *\n * This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a \"hint\" to the model.\n */\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()),\n /**\n * The MIME type for all resources that match this template. This should only be included if all resources matching this template have the same type.\n */\n mimeType: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()),\n /**\n * Optional annotations for the client.\n */\n annotations: AnnotationsSchema.optional(),\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({}))\n});\n/**\n * Sent from the client to request a list of resources the server has.\n */\nconst ListResourcesRequestSchema = PaginatedRequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('resources/list')\n});\n/**\n * The server's response to a resources/list request from the client.\n */\nconst ListResourcesResultSchema = PaginatedResultSchema.extend({\n resources: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(ResourceSchema)\n});\n/**\n * Sent from the client to request a list of resource templates the server has.\n */\nconst ListResourceTemplatesRequestSchema = PaginatedRequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('resources/templates/list')\n});\n/**\n * The server's response to a resources/templates/list request from the client.\n */\nconst ListResourceTemplatesResultSchema = PaginatedResultSchema.extend({\n resourceTemplates: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(ResourceTemplateSchema)\n});\nconst ResourceRequestParamsSchema = BaseRequestParamsSchema.extend({\n /**\n * The URI of the resource to read. The URI can use any protocol; it is up to the server how to interpret it.\n *\n * @format uri\n */\n uri: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()\n});\n/**\n * Parameters for a `resources/read` request.\n */\nconst ReadResourceRequestParamsSchema = ResourceRequestParamsSchema;\n/**\n * Sent from the client to the server, to read a specific resource URI.\n */\nconst ReadResourceRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('resources/read'),\n params: ReadResourceRequestParamsSchema\n});\n/**\n * The server's response to a resources/read request from the client.\n */\nconst ReadResourceResultSchema = ResultSchema.extend({\n contents: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([TextResourceContentsSchema, BlobResourceContentsSchema]))\n});\n/**\n * An optional notification from the server to the client, informing it that the list of resources it can read from has changed. This may be issued by servers without any previous subscription from the client.\n */\nconst ResourceListChangedNotificationSchema = NotificationSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('notifications/resources/list_changed'),\n params: NotificationsParamsSchema.optional()\n});\nconst SubscribeRequestParamsSchema = ResourceRequestParamsSchema;\n/**\n * Sent from the client to request resources/updated notifications from the server whenever a particular resource changes.\n */\nconst SubscribeRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('resources/subscribe'),\n params: SubscribeRequestParamsSchema\n});\nconst UnsubscribeRequestParamsSchema = ResourceRequestParamsSchema;\n/**\n * Sent from the client to request cancellation of resources/updated notifications from the server. This should follow a previous resources/subscribe request.\n */\nconst UnsubscribeRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('resources/unsubscribe'),\n params: UnsubscribeRequestParamsSchema\n});\n/**\n * Parameters for a `notifications/resources/updated` notification.\n */\nconst ResourceUpdatedNotificationParamsSchema = NotificationsParamsSchema.extend({\n /**\n * The URI of the resource that has been updated. This might be a sub-resource of the one that the client actually subscribed to.\n */\n uri: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()\n});\n/**\n * A notification from the server to the client, informing it that a resource has changed and may need to be read again. This should only be sent if the client previously sent a resources/subscribe request.\n */\nconst ResourceUpdatedNotificationSchema = NotificationSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('notifications/resources/updated'),\n params: ResourceUpdatedNotificationParamsSchema\n});\n/* Prompts */\n/**\n * Describes an argument that a prompt can accept.\n */\nconst PromptArgumentSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * The name of the argument.\n */\n name: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * A human-readable description of the argument.\n */\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()),\n /**\n * Whether this argument must be provided.\n */\n required: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean())\n});\n/**\n * A prompt or prompt template that the server offers.\n */\nconst PromptSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n ...BaseMetadataSchema.shape,\n ...IconsSchema.shape,\n /**\n * An optional description of what this prompt provides\n */\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()),\n /**\n * A list of arguments to use for templating the prompt.\n */\n arguments: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(PromptArgumentSchema)),\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({}))\n});\n/**\n * Sent from the client to request a list of prompts and prompt templates the server has.\n */\nconst ListPromptsRequestSchema = PaginatedRequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('prompts/list')\n});\n/**\n * The server's response to a prompts/list request from the client.\n */\nconst ListPromptsResultSchema = PaginatedResultSchema.extend({\n prompts: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(PromptSchema)\n});\n/**\n * Parameters for a `prompts/get` request.\n */\nconst GetPromptRequestParamsSchema = BaseRequestParamsSchema.extend({\n /**\n * The name of the prompt or prompt template.\n */\n name: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * Arguments to use for templating the prompt.\n */\n arguments: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional()\n});\n/**\n * Used by the client to get a prompt provided by the server.\n */\nconst GetPromptRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('prompts/get'),\n params: GetPromptRequestParamsSchema\n});\n/**\n * Text provided to or from an LLM.\n */\nconst TextContentSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('text'),\n /**\n * The text content of the message.\n */\n text: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * Optional annotations for the client.\n */\n annotations: AnnotationsSchema.optional(),\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()).optional()\n});\n/**\n * An image provided to or from an LLM.\n */\nconst ImageContentSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('image'),\n /**\n * The base64-encoded image data.\n */\n data: Base64Schema,\n /**\n * The MIME type of the image. Different providers may support different image types.\n */\n mimeType: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * Optional annotations for the client.\n */\n annotations: AnnotationsSchema.optional(),\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()).optional()\n});\n/**\n * An Audio provided to or from an LLM.\n */\nconst AudioContentSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('audio'),\n /**\n * The base64-encoded audio data.\n */\n data: Base64Schema,\n /**\n * The MIME type of the audio. Different providers may support different audio types.\n */\n mimeType: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * Optional annotations for the client.\n */\n annotations: AnnotationsSchema.optional(),\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()).optional()\n});\n/**\n * A tool call request from an assistant (LLM).\n * Represents the assistant's request to use a tool.\n */\nconst ToolUseContentSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('tool_use'),\n /**\n * The name of the tool to invoke.\n * Must match a tool name from the request's tools array.\n */\n name: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * Unique identifier for this tool call.\n * Used to correlate with ToolResultContent in subsequent messages.\n */\n id: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * Arguments to pass to the tool.\n * Must conform to the tool's inputSchema.\n */\n input: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()),\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()).optional()\n});\n/**\n * The contents of a resource, embedded into a prompt or tool call result.\n */\nconst EmbeddedResourceSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('resource'),\n resource: zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([TextResourceContentsSchema, BlobResourceContentsSchema]),\n /**\n * Optional annotations for the client.\n */\n annotations: AnnotationsSchema.optional(),\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()).optional()\n});\n/**\n * A resource that the server is capable of reading, included in a prompt or tool call result.\n *\n * Note: resource links returned by tools are not guaranteed to appear in the results of `resources/list` requests.\n */\nconst ResourceLinkSchema = ResourceSchema.extend({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('resource_link')\n});\n/**\n * A content block that can be used in prompts and tool results.\n */\nconst ContentBlockSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([\n TextContentSchema,\n ImageContentSchema,\n AudioContentSchema,\n ResourceLinkSchema,\n EmbeddedResourceSchema\n]);\n/**\n * Describes a message returned as part of a prompt.\n */\nconst PromptMessageSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n role: RoleSchema,\n content: ContentBlockSchema\n});\n/**\n * The server's response to a prompts/get request from the client.\n */\nconst GetPromptResultSchema = ResultSchema.extend({\n /**\n * An optional description for the prompt.\n */\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n messages: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(PromptMessageSchema)\n});\n/**\n * An optional notification from the server to the client, informing it that the list of prompts it offers has changed. This may be issued by servers without any previous subscription from the client.\n */\nconst PromptListChangedNotificationSchema = NotificationSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('notifications/prompts/list_changed'),\n params: NotificationsParamsSchema.optional()\n});\n/* Tools */\n/**\n * Additional properties describing a Tool to clients.\n *\n * NOTE: all properties in ToolAnnotations are **hints**.\n * They are not guaranteed to provide a faithful description of\n * tool behavior (including descriptive properties like `title`).\n *\n * Clients should never make tool use decisions based on ToolAnnotations\n * received from untrusted servers.\n */\nconst ToolAnnotationsSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * A human-readable title for the tool.\n */\n title: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n /**\n * If true, the tool does not modify its environment.\n *\n * Default: false\n */\n readOnlyHint: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional(),\n /**\n * If true, the tool may perform destructive updates to its environment.\n * If false, the tool performs only additive updates.\n *\n * (This property is meaningful only when `readOnlyHint == false`)\n *\n * Default: true\n */\n destructiveHint: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional(),\n /**\n * If true, calling the tool repeatedly with the same arguments\n * will have no additional effect on the its environment.\n *\n * (This property is meaningful only when `readOnlyHint == false`)\n *\n * Default: false\n */\n idempotentHint: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional(),\n /**\n * If true, this tool may interact with an \"open world\" of external\n * entities. If false, the tool's domain of interaction is closed.\n * For example, the world of a web search tool is open, whereas that\n * of a memory tool is not.\n *\n * Default: true\n */\n openWorldHint: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional()\n});\n/**\n * Execution-related properties for a tool.\n */\nconst ToolExecutionSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * Indicates the tool's preference for task-augmented execution.\n * - \"required\": Clients MUST invoke the tool as a task\n * - \"optional\": Clients MAY invoke the tool as a task or normal request\n * - \"forbidden\": Clients MUST NOT attempt to invoke the tool as a task\n *\n * If not present, defaults to \"forbidden\".\n */\n taskSupport: zod_v4__WEBPACK_IMPORTED_MODULE_0__[\"enum\"](['required', 'optional', 'forbidden']).optional()\n});\n/**\n * Definition for a tool the client can call.\n */\nconst ToolSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n ...BaseMetadataSchema.shape,\n ...IconsSchema.shape,\n /**\n * A human-readable description of the tool.\n */\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n /**\n * A JSON Schema 2020-12 object defining the expected parameters for the tool.\n * Must have type: 'object' at the root level per MCP spec.\n */\n inputSchema: zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('object'),\n properties: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), AssertObjectSchema).optional(),\n required: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional()\n })\n .catchall(zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()),\n /**\n * An optional JSON Schema 2020-12 object defining the structure of the tool's output\n * returned in the structuredContent field of a CallToolResult.\n * Must have type: 'object' at the root level per MCP spec.\n */\n outputSchema: zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('object'),\n properties: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), AssertObjectSchema).optional(),\n required: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional()\n })\n .catchall(zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown())\n .optional(),\n /**\n * Optional additional tool information.\n */\n annotations: ToolAnnotationsSchema.optional(),\n /**\n * Execution-related properties for this tool.\n */\n execution: ToolExecutionSchema.optional(),\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()).optional()\n});\n/**\n * Sent from the client to request a list of tools the server has.\n */\nconst ListToolsRequestSchema = PaginatedRequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('tools/list')\n});\n/**\n * The server's response to a tools/list request from the client.\n */\nconst ListToolsResultSchema = PaginatedResultSchema.extend({\n tools: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(ToolSchema)\n});\n/**\n * The server's response to a tool call.\n */\nconst CallToolResultSchema = ResultSchema.extend({\n /**\n * A list of content objects that represent the result of the tool call.\n *\n * If the Tool does not define an outputSchema, this field MUST be present in the result.\n * For backwards compatibility, this field is always present, but it may be empty.\n */\n content: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(ContentBlockSchema).default([]),\n /**\n * An object containing structured tool output.\n *\n * If the Tool defines an outputSchema, this field MUST be present in the result, and contain a JSON object that matches the schema.\n */\n structuredContent: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()).optional(),\n /**\n * Whether the tool call ended in an error.\n *\n * If not set, this is assumed to be false (the call was successful).\n *\n * Any errors that originate from the tool SHOULD be reported inside the result\n * object, with `isError` set to true, _not_ as an MCP protocol-level error\n * response. Otherwise, the LLM would not be able to see that an error occurred\n * and self-correct.\n *\n * However, any errors in _finding_ the tool, an error indicating that the\n * server does not support tool calls, or any other exceptional conditions,\n * should be reported as an MCP error response.\n */\n isError: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional()\n});\n/**\n * CallToolResultSchema extended with backwards compatibility to protocol version 2024-10-07.\n */\nconst CompatibilityCallToolResultSchema = CallToolResultSchema.or(ResultSchema.extend({\n toolResult: zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()\n}));\n/**\n * Parameters for a `tools/call` request.\n */\nconst CallToolRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({\n /**\n * The name of the tool to call.\n */\n name: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * Arguments to pass to the tool.\n */\n arguments: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()).optional()\n});\n/**\n * Used by the client to invoke a tool provided by the server.\n */\nconst CallToolRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('tools/call'),\n params: CallToolRequestParamsSchema\n});\n/**\n * An optional notification from the server to the client, informing it that the list of tools it offers has changed. This may be issued by servers without any previous subscription from the client.\n */\nconst ToolListChangedNotificationSchema = NotificationSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('notifications/tools/list_changed'),\n params: NotificationsParamsSchema.optional()\n});\n/**\n * Base schema for list changed subscription options (without callback).\n * Used internally for Zod validation of autoRefresh and debounceMs.\n */\nconst ListChangedOptionsBaseSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * If true, the list will be refreshed automatically when a list changed notification is received.\n * The callback will be called with the updated list.\n *\n * If false, the callback will be called with null items, allowing manual refresh.\n *\n * @default true\n */\n autoRefresh: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().default(true),\n /**\n * Debounce time in milliseconds for list changed notification processing.\n *\n * Multiple notifications received within this timeframe will only trigger one refresh.\n * Set to 0 to disable debouncing.\n *\n * @default 300\n */\n debounceMs: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().int().nonnegative().default(300)\n});\n/* Logging */\n/**\n * The severity of a log message.\n */\nconst LoggingLevelSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__[\"enum\"](['debug', 'info', 'notice', 'warning', 'error', 'critical', 'alert', 'emergency']);\n/**\n * Parameters for a `logging/setLevel` request.\n */\nconst SetLevelRequestParamsSchema = BaseRequestParamsSchema.extend({\n /**\n * The level of logging that the client wants to receive from the server. The server should send all logs at this level and higher (i.e., more severe) to the client as notifications/logging/message.\n */\n level: LoggingLevelSchema\n});\n/**\n * A request from the client to the server, to enable or adjust logging.\n */\nconst SetLevelRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('logging/setLevel'),\n params: SetLevelRequestParamsSchema\n});\n/**\n * Parameters for a `notifications/message` notification.\n */\nconst LoggingMessageNotificationParamsSchema = NotificationsParamsSchema.extend({\n /**\n * The severity of this log message.\n */\n level: LoggingLevelSchema,\n /**\n * An optional name of the logger issuing this message.\n */\n logger: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n /**\n * The data to be logged, such as a string message or an object. Any JSON serializable type is allowed here.\n */\n data: zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()\n});\n/**\n * Notification of a log message passed from server to client. If no logging/setLevel request has been sent from the client, the server MAY decide which messages to send automatically.\n */\nconst LoggingMessageNotificationSchema = NotificationSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('notifications/message'),\n params: LoggingMessageNotificationParamsSchema\n});\n/* Sampling */\n/**\n * Hints to use for model selection.\n */\nconst ModelHintSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * A hint for a model name.\n */\n name: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional()\n});\n/**\n * The server's preferences for model selection, requested of the client during sampling.\n */\nconst ModelPreferencesSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * Optional hints to use for model selection.\n */\n hints: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(ModelHintSchema).optional(),\n /**\n * How much to prioritize cost when selecting a model.\n */\n costPriority: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().min(0).max(1).optional(),\n /**\n * How much to prioritize sampling speed (latency) when selecting a model.\n */\n speedPriority: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().min(0).max(1).optional(),\n /**\n * How much to prioritize intelligence and capabilities when selecting a model.\n */\n intelligencePriority: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().min(0).max(1).optional()\n});\n/**\n * Controls tool usage behavior in sampling requests.\n */\nconst ToolChoiceSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * Controls when tools are used:\n * - \"auto\": Model decides whether to use tools (default)\n * - \"required\": Model MUST use at least one tool before completing\n * - \"none\": Model MUST NOT use any tools\n */\n mode: zod_v4__WEBPACK_IMPORTED_MODULE_0__[\"enum\"](['auto', 'required', 'none']).optional()\n});\n/**\n * The result of a tool execution, provided by the user (server).\n * Represents the outcome of invoking a tool requested via ToolUseContent.\n */\nconst ToolResultContentSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('tool_result'),\n toolUseId: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().describe('The unique identifier for the corresponding tool call.'),\n content: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(ContentBlockSchema).default([]),\n structuredContent: zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({}).loose().optional(),\n isError: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional(),\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()).optional()\n});\n/**\n * Basic content types for sampling responses (without tool use).\n * Used for backwards-compatible CreateMessageResult when tools are not used.\n */\nconst SamplingContentSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.discriminatedUnion('type', [TextContentSchema, ImageContentSchema, AudioContentSchema]);\n/**\n * Content block types allowed in sampling messages.\n * This includes text, image, audio, tool use requests, and tool results.\n */\nconst SamplingMessageContentBlockSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.discriminatedUnion('type', [\n TextContentSchema,\n ImageContentSchema,\n AudioContentSchema,\n ToolUseContentSchema,\n ToolResultContentSchema\n]);\n/**\n * Describes a message issued to or received from an LLM API.\n */\nconst SamplingMessageSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n role: RoleSchema,\n content: zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([SamplingMessageContentBlockSchema, zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(SamplingMessageContentBlockSchema)]),\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()).optional()\n});\n/**\n * Parameters for a `sampling/createMessage` request.\n */\nconst CreateMessageRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({\n messages: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(SamplingMessageSchema),\n /**\n * The server's preferences for which model to select. The client MAY modify or omit this request.\n */\n modelPreferences: ModelPreferencesSchema.optional(),\n /**\n * An optional system prompt the server wants to use for sampling. The client MAY modify or omit this prompt.\n */\n systemPrompt: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n /**\n * A request to include context from one or more MCP servers (including the caller), to be attached to the prompt.\n * The client MAY ignore this request.\n *\n * Default is \"none\". Values \"thisServer\" and \"allServers\" are soft-deprecated. Servers SHOULD only use these values if the client\n * declares ClientCapabilities.sampling.context. These values may be removed in future spec releases.\n */\n includeContext: zod_v4__WEBPACK_IMPORTED_MODULE_0__[\"enum\"](['none', 'thisServer', 'allServers']).optional(),\n temperature: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional(),\n /**\n * The requested maximum number of tokens to sample (to prevent runaway completions).\n *\n * The client MAY choose to sample fewer tokens than the requested maximum.\n */\n maxTokens: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().int(),\n stopSequences: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n /**\n * Optional metadata to pass through to the LLM provider. The format of this metadata is provider-specific.\n */\n metadata: AssertObjectSchema.optional(),\n /**\n * Tools that the model may use during generation.\n * The client MUST return an error if this field is provided but ClientCapabilities.sampling.tools is not declared.\n */\n tools: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(ToolSchema).optional(),\n /**\n * Controls how the model uses tools.\n * The client MUST return an error if this field is provided but ClientCapabilities.sampling.tools is not declared.\n * Default is `{ mode: \"auto\" }`.\n */\n toolChoice: ToolChoiceSchema.optional()\n});\n/**\n * A request from the server to sample an LLM via the client. The client has full discretion over which model to select. The client should also inform the user before beginning sampling, to allow them to inspect the request (human in the loop) and decide whether to approve it.\n */\nconst CreateMessageRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('sampling/createMessage'),\n params: CreateMessageRequestParamsSchema\n});\n/**\n * The client's response to a sampling/create_message request from the server.\n * This is the backwards-compatible version that returns single content (no arrays).\n * Used when the request does not include tools.\n */\nconst CreateMessageResultSchema = ResultSchema.extend({\n /**\n * The name of the model that generated the message.\n */\n model: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * The reason why sampling stopped, if known.\n *\n * Standard values:\n * - \"endTurn\": Natural end of the assistant's turn\n * - \"stopSequence\": A stop sequence was encountered\n * - \"maxTokens\": Maximum token limit was reached\n *\n * This field is an open string to allow for provider-specific stop reasons.\n */\n stopReason: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__[\"enum\"](['endTurn', 'stopSequence', 'maxTokens']).or(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string())),\n role: RoleSchema,\n /**\n * Response content. Single content block (text, image, or audio).\n */\n content: SamplingContentSchema\n});\n/**\n * The client's response to a sampling/create_message request when tools were provided.\n * This version supports array content for tool use flows.\n */\nconst CreateMessageResultWithToolsSchema = ResultSchema.extend({\n /**\n * The name of the model that generated the message.\n */\n model: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * The reason why sampling stopped, if known.\n *\n * Standard values:\n * - \"endTurn\": Natural end of the assistant's turn\n * - \"stopSequence\": A stop sequence was encountered\n * - \"maxTokens\": Maximum token limit was reached\n * - \"toolUse\": The model wants to use one or more tools\n *\n * This field is an open string to allow for provider-specific stop reasons.\n */\n stopReason: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__[\"enum\"](['endTurn', 'stopSequence', 'maxTokens', 'toolUse']).or(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string())),\n role: RoleSchema,\n /**\n * Response content. May be a single block or array. May include ToolUseContent if stopReason is \"toolUse\".\n */\n content: zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([SamplingMessageContentBlockSchema, zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(SamplingMessageContentBlockSchema)])\n});\n/* Elicitation */\n/**\n * Primitive schema definition for boolean fields.\n */\nconst BooleanSchemaSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('boolean'),\n title: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n default: zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean().optional()\n});\n/**\n * Primitive schema definition for string fields.\n */\nconst StringSchemaSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('string'),\n title: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n minLength: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional(),\n maxLength: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional(),\n format: zod_v4__WEBPACK_IMPORTED_MODULE_0__[\"enum\"](['email', 'uri', 'date', 'date-time']).optional(),\n default: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional()\n});\n/**\n * Primitive schema definition for number fields.\n */\nconst NumberSchemaSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__[\"enum\"](['number', 'integer']),\n title: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n minimum: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional(),\n maximum: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional(),\n default: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional()\n});\n/**\n * Schema for single-selection enumeration without display titles for options.\n */\nconst UntitledSingleSelectEnumSchemaSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('string'),\n title: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n enum: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()),\n default: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional()\n});\n/**\n * Schema for single-selection enumeration with display titles for each option.\n */\nconst TitledSingleSelectEnumSchemaSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('string'),\n title: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n oneOf: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n const: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n title: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()\n })),\n default: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional()\n});\n/**\n * Use TitledSingleSelectEnumSchema instead.\n * This interface will be removed in a future version.\n */\nconst LegacyTitledEnumSchemaSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('string'),\n title: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n enum: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()),\n enumNames: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional(),\n default: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional()\n});\n// Combined single selection enumeration\nconst SingleSelectEnumSchemaSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([UntitledSingleSelectEnumSchemaSchema, TitledSingleSelectEnumSchemaSchema]);\n/**\n * Schema for multiple-selection enumeration without display titles for options.\n */\nconst UntitledMultiSelectEnumSchemaSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('array'),\n title: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n minItems: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional(),\n maxItems: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional(),\n items: zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('string'),\n enum: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string())\n }),\n default: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional()\n});\n/**\n * Schema for multiple-selection enumeration with display titles for each option.\n */\nconst TitledMultiSelectEnumSchemaSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('array'),\n title: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n description: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n minItems: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional(),\n maxItems: zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().optional(),\n items: zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n anyOf: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n const: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n title: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()\n }))\n }),\n default: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional()\n});\n/**\n * Combined schema for multiple-selection enumeration\n */\nconst MultiSelectEnumSchemaSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema]);\n/**\n * Primitive schema definition for enum fields.\n */\nconst EnumSchemaSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([LegacyTitledEnumSchemaSchema, SingleSelectEnumSchemaSchema, MultiSelectEnumSchemaSchema]);\n/**\n * Union of all primitive schema definitions.\n */\nconst PrimitiveSchemaDefinitionSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([EnumSchemaSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema]);\n/**\n * Parameters for an `elicitation/create` request for form-based elicitation.\n */\nconst ElicitRequestFormParamsSchema = TaskAugmentedRequestParamsSchema.extend({\n /**\n * The elicitation mode.\n *\n * Optional for backward compatibility. Clients MUST treat missing mode as \"form\".\n */\n mode: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('form').optional(),\n /**\n * The message to present to the user describing what information is being requested.\n */\n message: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * A restricted subset of JSON Schema.\n * Only top-level properties are allowed, without nesting.\n */\n requestedSchema: zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('object'),\n properties: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), PrimitiveSchemaDefinitionSchema),\n required: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional()\n })\n});\n/**\n * Parameters for an `elicitation/create` request for URL-based elicitation.\n */\nconst ElicitRequestURLParamsSchema = TaskAugmentedRequestParamsSchema.extend({\n /**\n * The elicitation mode.\n */\n mode: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('url'),\n /**\n * The message to present to the user explaining why the interaction is needed.\n */\n message: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * The ID of the elicitation, which must be unique within the context of the server.\n * The client MUST treat this ID as an opaque value.\n */\n elicitationId: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * The URL that the user should navigate to.\n */\n url: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().url()\n});\n/**\n * The parameters for a request to elicit additional information from the user via the client.\n */\nconst ElicitRequestParamsSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([ElicitRequestFormParamsSchema, ElicitRequestURLParamsSchema]);\n/**\n * A request from the server to elicit user input via the client.\n * The client should present the message and form fields to the user (form mode)\n * or navigate to a URL (URL mode).\n */\nconst ElicitRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('elicitation/create'),\n params: ElicitRequestParamsSchema\n});\n/**\n * Parameters for a `notifications/elicitation/complete` notification.\n *\n * @category notifications/elicitation/complete\n */\nconst ElicitationCompleteNotificationParamsSchema = NotificationsParamsSchema.extend({\n /**\n * The ID of the elicitation that completed.\n */\n elicitationId: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()\n});\n/**\n * A notification from the server to the client, informing it of a completion of an out-of-band elicitation request.\n *\n * @category notifications/elicitation/complete\n */\nconst ElicitationCompleteNotificationSchema = NotificationSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('notifications/elicitation/complete'),\n params: ElicitationCompleteNotificationParamsSchema\n});\n/**\n * The client's response to an elicitation/create request from the server.\n */\nconst ElicitResultSchema = ResultSchema.extend({\n /**\n * The user action in response to the elicitation.\n * - \"accept\": User submitted the form/confirmed the action\n * - \"decline\": User explicitly decline the action\n * - \"cancel\": User dismissed without making an explicit choice\n */\n action: zod_v4__WEBPACK_IMPORTED_MODULE_0__[\"enum\"](['accept', 'decline', 'cancel']),\n /**\n * The submitted form data, only present when action is \"accept\".\n * Contains values matching the requested schema.\n * Per MCP spec, content is \"typically omitted\" for decline/cancel actions.\n * We normalize null to undefined for leniency while maintaining type compatibility.\n */\n content: zod_v4__WEBPACK_IMPORTED_MODULE_0__.preprocess(val => (val === null ? undefined : val), zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.number(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string())])).optional())\n});\n/* Autocomplete */\n/**\n * A reference to a resource or resource template definition.\n */\nconst ResourceTemplateReferenceSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('ref/resource'),\n /**\n * The URI or URI template of the resource.\n */\n uri: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()\n});\n/**\n * @deprecated Use ResourceTemplateReferenceSchema instead\n */\nconst ResourceReferenceSchema = ResourceTemplateReferenceSchema;\n/**\n * Identifies a prompt.\n */\nconst PromptReferenceSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n type: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('ref/prompt'),\n /**\n * The name of the prompt or prompt template\n */\n name: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()\n});\n/**\n * Parameters for a `completion/complete` request.\n */\nconst CompleteRequestParamsSchema = BaseRequestParamsSchema.extend({\n ref: zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([PromptReferenceSchema, ResourceTemplateReferenceSchema]),\n /**\n * The argument's information\n */\n argument: zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * The name of the argument\n */\n name: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(),\n /**\n * The value of the argument to use for completion matching.\n */\n value: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()\n }),\n context: zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * Previously-resolved variables in a URI template or prompt.\n */\n arguments: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).optional()\n })\n .optional()\n});\n/**\n * A request from the client to the server, to ask for completion options.\n */\nconst CompleteRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('completion/complete'),\n params: CompleteRequestParamsSchema\n});\nfunction assertCompleteRequestPrompt(request) {\n if (request.params.ref.type !== 'ref/prompt') {\n throw new TypeError(`Expected CompleteRequestPrompt, but got ${request.params.ref.type}`);\n }\n void request;\n}\nfunction assertCompleteRequestResourceTemplate(request) {\n if (request.params.ref.type !== 'ref/resource') {\n throw new TypeError(`Expected CompleteRequestResourceTemplate, but got ${request.params.ref.type}`);\n }\n void request;\n}\n/**\n * The server's response to a completion/complete request\n */\nconst CompleteResultSchema = ResultSchema.extend({\n completion: zod_v4__WEBPACK_IMPORTED_MODULE_0__.looseObject({\n /**\n * An array of completion values. Must not exceed 100 items.\n */\n values: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string()).max(100),\n /**\n * The total number of completion options available. This can exceed the number of values actually sent in the response.\n */\n total: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.number().int()),\n /**\n * Indicates whether there are additional completion options beyond those provided in the current response, even if the exact total is unknown.\n */\n hasMore: zod_v4__WEBPACK_IMPORTED_MODULE_0__.optional(zod_v4__WEBPACK_IMPORTED_MODULE_0__.boolean())\n })\n});\n/* Roots */\n/**\n * Represents a root directory or file that the server can operate on.\n */\nconst RootSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.object({\n /**\n * The URI identifying the root. This *must* start with file:// for now.\n */\n uri: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().startsWith('file://'),\n /**\n * An optional name for the root.\n */\n name: zod_v4__WEBPACK_IMPORTED_MODULE_0__.string().optional(),\n /**\n * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n * for notes on _meta usage.\n */\n _meta: zod_v4__WEBPACK_IMPORTED_MODULE_0__.record(zod_v4__WEBPACK_IMPORTED_MODULE_0__.string(), zod_v4__WEBPACK_IMPORTED_MODULE_0__.unknown()).optional()\n});\n/**\n * Sent from the server to request a list of root URIs from the client.\n */\nconst ListRootsRequestSchema = RequestSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('roots/list'),\n params: BaseRequestParamsSchema.optional()\n});\n/**\n * The client's response to a roots/list request from the server.\n */\nconst ListRootsResultSchema = ResultSchema.extend({\n roots: zod_v4__WEBPACK_IMPORTED_MODULE_0__.array(RootSchema)\n});\n/**\n * A notification from the client to the server, informing it that the list of roots has changed.\n */\nconst RootsListChangedNotificationSchema = NotificationSchema.extend({\n method: zod_v4__WEBPACK_IMPORTED_MODULE_0__.literal('notifications/roots/list_changed'),\n params: NotificationsParamsSchema.optional()\n});\n/* Client messages */\nconst ClientRequestSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([\n PingRequestSchema,\n InitializeRequestSchema,\n CompleteRequestSchema,\n SetLevelRequestSchema,\n GetPromptRequestSchema,\n ListPromptsRequestSchema,\n ListResourcesRequestSchema,\n ListResourceTemplatesRequestSchema,\n ReadResourceRequestSchema,\n SubscribeRequestSchema,\n UnsubscribeRequestSchema,\n CallToolRequestSchema,\n ListToolsRequestSchema,\n GetTaskRequestSchema,\n GetTaskPayloadRequestSchema,\n ListTasksRequestSchema,\n CancelTaskRequestSchema\n]);\nconst ClientNotificationSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([\n CancelledNotificationSchema,\n ProgressNotificationSchema,\n InitializedNotificationSchema,\n RootsListChangedNotificationSchema,\n TaskStatusNotificationSchema\n]);\nconst ClientResultSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([\n EmptyResultSchema,\n CreateMessageResultSchema,\n CreateMessageResultWithToolsSchema,\n ElicitResultSchema,\n ListRootsResultSchema,\n GetTaskResultSchema,\n ListTasksResultSchema,\n CreateTaskResultSchema\n]);\n/* Server messages */\nconst ServerRequestSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([\n PingRequestSchema,\n CreateMessageRequestSchema,\n ElicitRequestSchema,\n ListRootsRequestSchema,\n GetTaskRequestSchema,\n GetTaskPayloadRequestSchema,\n ListTasksRequestSchema,\n CancelTaskRequestSchema\n]);\nconst ServerNotificationSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([\n CancelledNotificationSchema,\n ProgressNotificationSchema,\n LoggingMessageNotificationSchema,\n ResourceUpdatedNotificationSchema,\n ResourceListChangedNotificationSchema,\n ToolListChangedNotificationSchema,\n PromptListChangedNotificationSchema,\n TaskStatusNotificationSchema,\n ElicitationCompleteNotificationSchema\n]);\nconst ServerResultSchema = zod_v4__WEBPACK_IMPORTED_MODULE_0__.union([\n EmptyResultSchema,\n InitializeResultSchema,\n CompleteResultSchema,\n GetPromptResultSchema,\n ListPromptsResultSchema,\n ListResourcesResultSchema,\n ListResourceTemplatesResultSchema,\n ReadResourceResultSchema,\n CallToolResultSchema,\n ListToolsResultSchema,\n GetTaskResultSchema,\n ListTasksResultSchema,\n CreateTaskResultSchema\n]);\nclass McpError extends Error {\n constructor(code, message, data) {\n super(`MCP error ${code}: ${message}`);\n this.code = code;\n this.data = data;\n this.name = 'McpError';\n }\n /**\n * Factory method to create the appropriate error type based on the error code and data\n */\n static fromError(code, message, data) {\n // Check for specific error types\n if (code === ErrorCode.UrlElicitationRequired && data) {\n const errorData = data;\n if (errorData.elicitations) {\n return new UrlElicitationRequiredError(errorData.elicitations, message);\n }\n }\n // Default to generic McpError\n return new McpError(code, message, data);\n }\n}\n/**\n * Specialized error type when a tool requires a URL mode elicitation.\n * This makes it nicer for the client to handle since there is specific data to work with instead of just a code to check against.\n */\nclass UrlElicitationRequiredError extends McpError {\n constructor(elicitations, message = `URL elicitation${elicitations.length > 1 ? 's' : ''} required`) {\n super(ErrorCode.UrlElicitationRequired, message, {\n elicitations: elicitations\n });\n }\n get elicitations() {\n return this.data?.elicitations ?? [];\n }\n}\n//# sourceMappingURL=types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vdHlwZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBNEI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDUDtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiwwQ0FBUTtBQUNuQztBQUNBO0FBQ0E7QUFDTyw0QkFBNEIseUNBQU8sRUFBRSwwQ0FBUSxJQUFJLDBDQUFRO0FBQ2hFO0FBQ0E7QUFDQTtBQUNPLHFCQUFxQiwwQ0FBUTtBQUNwQztBQUNBO0FBQ0E7QUFDTyxpQ0FBaUMsK0NBQWE7QUFDckQ7QUFDQTtBQUNBO0FBQ0EsU0FBUywwQ0FBUTtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsMENBQVE7QUFDMUIsQ0FBQztBQUNNLDJCQUEyQiwwQ0FBUTtBQUMxQyxTQUFTLDBDQUFRO0FBQ2pCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNPLGtDQUFrQywwQ0FBUTtBQUNqRCxZQUFZLDBDQUFRO0FBQ3BCLENBQUM7QUFDRCwwQkFBMEIsK0NBQWE7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsMENBQVE7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLDJCQUEyQixLQUFLLElBQUksUUFBUTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCwwREFBMEQsb0NBQW9DO0FBQzlGO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0Btb2RlbGNvbnRleHRwcm90b2NvbCtzZGtAMS4yOS4wX3pvZEAzLjI1Ljc2L25vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2Rpc3QvZXNtL3R5cGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHogZnJvbSAnem9kL3Y0JztcbmV4cG9ydCBjb25zdCBMQVRFU1RfUFJPVE9DT0xfVkVSU0lPTiA9ICcyMDI1LTExLTI1JztcbmV4cG9ydCBjb25zdCBERUZBVUxUX05FR09USUFURURfUFJPVE9DT0xfVkVSU0lPTiA9ICcyMDI1LTAzLTI2JztcbmV4cG9ydCBjb25zdCBTVVBQT1JURURfUFJPVE9DT0xfVkVSU0lPTlMgPSBbTEFURVNUX1BST1RPQ09MX1ZFUlNJT04sICcyMDI1LTA2LTE4JywgJzIwMjUtMDMtMjYnLCAnMjAyNC0xMS0wNScsICcyMDI0LTEwLTA3J107XG5leHBvcnQgY29uc3QgUkVMQVRFRF9UQVNLX01FVEFfS0VZID0gJ2lvLm1vZGVsY29udGV4dHByb3RvY29sL3JlbGF0ZWQtdGFzayc7XG4vKiBKU09OLVJQQyB0eXBlcyAqL1xuZXhwb3J0IGNvbnN0IEpTT05SUENfVkVSU0lPTiA9ICcyLjAnO1xuLyoqXG4gKiBBc3NlcnQgJ29iamVjdCcgdHlwZSBzY2hlbWEuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IEFzc2VydE9iamVjdFNjaGVtYSA9IHouY3VzdG9tKCh2KSA9PiB2ICE9PSBudWxsICYmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHYgPT09ICdmdW5jdGlvbicpKTtcbi8qKlxuICogQSBwcm9ncmVzcyB0b2tlbiwgdXNlZCB0byBhc3NvY2lhdGUgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9ucyB3aXRoIHRoZSBvcmlnaW5hbCByZXF1ZXN0LlxuICovXG5leHBvcnQgY29uc3QgUHJvZ3Jlc3NUb2tlblNjaGVtYSA9IHoudW5pb24oW3ouc3RyaW5nKCksIHoubnVtYmVyKCkuaW50KCldKTtcbi8qKlxuICogQW4gb3BhcXVlIHRva2VuIHVzZWQgdG8gcmVwcmVzZW50IGEgY3Vyc29yIGZvciBwYWdpbmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgQ3Vyc29yU2NoZW1hID0gei5zdHJpbmcoKTtcbi8qKlxuICogVGFzayBjcmVhdGlvbiBwYXJhbWV0ZXJzLCB1c2VkIHRvIGFzayB0aGF0IHRoZSBzZXJ2ZXIgY3JlYXRlIGEgdGFzayB0byByZXByZXNlbnQgYSByZXF1ZXN0LlxuICovXG5leHBvcnQgY29uc3QgVGFza0NyZWF0aW9uUGFyYW1zU2NoZW1hID0gei5sb29zZU9iamVjdCh7XG4gICAgLyoqXG4gICAgICogUmVxdWVzdGVkIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0byByZXRhaW4gdGFzayBmcm9tIGNyZWF0aW9uLlxuICAgICAqL1xuICAgIHR0bDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmV0d2VlbiB0YXNrIHN0YXR1cyByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBwb2xsSW50ZXJ2YWw6IHoubnVtYmVyKCkub3B0aW9uYWwoKVxufSk7XG5leHBvcnQgY29uc3QgVGFza01ldGFkYXRhU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIHR0bDogei5udW1iZXIoKS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogTWV0YWRhdGEgZm9yIGFzc29jaWF0aW5nIG1lc3NhZ2VzIHdpdGggYSB0YXNrLlxuICogSW5jbHVkZSB0aGlzIGluIHRoZSBgX21ldGFgIGZpZWxkIHVuZGVyIHRoZSBrZXkgYGlvLm1vZGVsY29udGV4dHByb3RvY29sL3JlbGF0ZWQtdGFza2AuXG4gKi9cbmV4cG9ydCBjb25zdCBSZWxhdGVkVGFza01ldGFkYXRhU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIHRhc2tJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1ZXN0TWV0YVNjaGVtYSA9IHoubG9vc2VPYmplY3Qoe1xuICAgIC8qKlxuICAgICAqIElmIHNwZWNpZmllZCwgdGhlIGNhbGxlciBpcyByZXF1ZXN0aW5nIG91dC1vZi1iYW5kIHByb2dyZXNzIG5vdGlmaWNhdGlvbnMgZm9yIHRoaXMgcmVxdWVzdCAoYXMgcmVwcmVzZW50ZWQgYnkgbm90aWZpY2F0aW9ucy9wcm9ncmVzcykuIFRoZSB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBpcyBhbiBvcGFxdWUgdG9rZW4gdGhhdCB3aWxsIGJlIGF0dGFjaGVkIHRvIGFueSBzdWJzZXF1ZW50IG5vdGlmaWNhdGlvbnMuIFRoZSByZWNlaXZlciBpcyBub3Qgb2JsaWdhdGVkIHRvIHByb3ZpZGUgdGhlc2Ugbm90aWZpY2F0aW9ucy5cbiAgICAgKi9cbiAgICBwcm9ncmVzc1Rva2VuOiBQcm9ncmVzc1Rva2VuU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgLyoqXG4gICAgICogSWYgc3BlY2lmaWVkLCB0aGlzIHJlcXVlc3QgaXMgcmVsYXRlZCB0byB0aGUgcHJvdmlkZWQgdGFzay5cbiAgICAgKi9cbiAgICBbUkVMQVRFRF9UQVNLX01FVEFfS0VZXTogUmVsYXRlZFRhc2tNZXRhZGF0YVNjaGVtYS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogQ29tbW9uIHBhcmFtcyBmb3IgYW55IHJlcXVlc3QuXG4gKi9cbmNvbnN0IEJhc2VSZXF1ZXN0UGFyYW1zU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICAgICAqIFNlZSBbR2VuZXJhbCBmaWVsZHM6IGBfbWV0YWBdKC9zcGVjaWZpY2F0aW9uL2RyYWZ0L2Jhc2ljL2luZGV4I21ldGEpIGZvciBub3RlcyBvbiBgX21ldGFgIHVzYWdlLlxuICAgICAqL1xuICAgIF9tZXRhOiBSZXF1ZXN0TWV0YVNjaGVtYS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogQ29tbW9uIHBhcmFtcyBmb3IgYW55IHRhc2stYXVnbWVudGVkIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBUYXNrQXVnbWVudGVkUmVxdWVzdFBhcmFtc1NjaGVtYSA9IEJhc2VSZXF1ZXN0UGFyYW1zU2NoZW1hLmV4dGVuZCh7XG4gICAgLyoqXG4gICAgICogSWYgc3BlY2lmaWVkLCB0aGUgY2FsbGVyIGlzIHJlcXVlc3RpbmcgdGFzay1hdWdtZW50ZWQgZXhlY3V0aW9uIGZvciB0aGlzIHJlcXVlc3QuXG4gICAgICogVGhlIHJlcXVlc3Qgd2lsbCByZXR1cm4gYSBDcmVhdGVUYXNrUmVzdWx0IGltbWVkaWF0ZWx5LCBhbmQgdGhlIGFjdHVhbCByZXN1bHQgY2FuIGJlXG4gICAgICogcmV0cmlldmVkIGxhdGVyIHZpYSB0YXNrcy9yZXN1bHQuXG4gICAgICpcbiAgICAgKiBUYXNrIGF1Z21lbnRhdGlvbiBpcyBzdWJqZWN0IHRvIGNhcGFiaWxpdHkgbmVnb3RpYXRpb24gLSByZWNlaXZlcnMgTVVTVCBkZWNsYXJlIHN1cHBvcnRcbiAgICAgKiBmb3IgdGFzayBhdWdtZW50YXRpb24gb2Ygc3BlY2lmaWMgcmVxdWVzdCB0eXBlcyBpbiB0aGVpciBjYXBhYmlsaXRpZXMuXG4gICAgICovXG4gICAgdGFzazogVGFza01ldGFkYXRhU2NoZW1hLm9wdGlvbmFsKClcbn0pO1xuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBhIHZhbGlkIFRhc2tBdWdtZW50ZWRSZXF1ZXN0UGFyYW1zLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgdmFsaWQgVGFza0F1Z21lbnRlZFJlcXVlc3RQYXJhbXMsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzVGFza0F1Z21lbnRlZFJlcXVlc3RQYXJhbXMgPSAodmFsdWUpID0+IFRhc2tBdWdtZW50ZWRSZXF1ZXN0UGFyYW1zU2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2VzcztcbmV4cG9ydCBjb25zdCBSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIG1ldGhvZDogei5zdHJpbmcoKSxcbiAgICBwYXJhbXM6IEJhc2VSZXF1ZXN0UGFyYW1zU2NoZW1hLmxvb3NlKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBOb3RpZmljYXRpb25zUGFyYW1zU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICAgICAqIFNlZSBbTUNQIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9tb2RlbGNvbnRleHRwcm90b2NvbC9tb2RlbGNvbnRleHRwcm90b2NvbC9ibG9iLzQ3MzM5YzAzYzE0M2JiNGVjMDFhMjZlNzIxYTFiOGZlNjY2MzRlYmUvZG9jcy9zcGVjaWZpY2F0aW9uL2RyYWZ0L2Jhc2ljL2luZGV4Lm1keCNnZW5lcmFsLWZpZWxkcylcbiAgICAgKiBmb3Igbm90ZXMgb24gX21ldGEgdXNhZ2UuXG4gICAgICovXG4gICAgX21ldGE6IFJlcXVlc3RNZXRhU2NoZW1hLm9wdGlvbmFsKClcbn0pO1xuZXhwb3J0IGNvbnN0IE5vdGlmaWNhdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBtZXRob2Q6IHouc3RyaW5nKCksXG4gICAgcGFyYW1zOiBOb3RpZmljYXRpb25zUGFyYW1zU2NoZW1hLmxvb3NlKCkub3B0aW9uYWwoKVxufSk7XG5leHBvcnQgY29uc3QgUmVzdWx0U2NoZW1hID0gei5sb29zZU9iamVjdCh7XG4gICAgLyoqXG4gICAgICogU2VlIFtNQ1Agc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL21vZGVsY29udGV4dHByb3RvY29sL21vZGVsY29udGV4dHByb3RvY29sL2Jsb2IvNDczMzljMDNjMTQzYmI0ZWMwMWEyNmU3MjFhMWI4ZmU2NjYzNGViZS9kb2NzL3NwZWNpZmljYXRpb24vZHJhZnQvYmFzaWMvaW5kZXgubWR4I2dlbmVyYWwtZmllbGRzKVxuICAgICAqIGZvciBub3RlcyBvbiBfbWV0YSB1c2FnZS5cbiAgICAgKi9cbiAgICBfbWV0YTogUmVxdWVzdE1ldGFTY2hlbWEub3B0aW9uYWwoKVxufSk7XG4vKipcbiAqIEEgdW5pcXVlbHkgaWRlbnRpZnlpbmcgSUQgZm9yIGEgcmVxdWVzdCBpbiBKU09OLVJQQy5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RJZFNjaGVtYSA9IHoudW5pb24oW3ouc3RyaW5nKCksIHoubnVtYmVyKCkuaW50KCldKTtcbi8qKlxuICogQSByZXF1ZXN0IHRoYXQgZXhwZWN0cyBhIHJlc3BvbnNlLlxuICovXG5leHBvcnQgY29uc3QgSlNPTlJQQ1JlcXVlc3RTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAganNvbnJwYzogei5saXRlcmFsKEpTT05SUENfVkVSU0lPTiksXG4gICAgaWQ6IFJlcXVlc3RJZFNjaGVtYSxcbiAgICAuLi5SZXF1ZXN0U2NoZW1hLnNoYXBlXG59KVxuICAgIC5zdHJpY3QoKTtcbmV4cG9ydCBjb25zdCBpc0pTT05SUENSZXF1ZXN0ID0gKHZhbHVlKSA9PiBKU09OUlBDUmVxdWVzdFNjaGVtYS5zYWZlUGFyc2UodmFsdWUpLnN1Y2Nlc3M7XG4vKipcbiAqIEEgbm90aWZpY2F0aW9uIHdoaWNoIGRvZXMgbm90IGV4cGVjdCBhIHJlc3BvbnNlLlxuICovXG5leHBvcnQgY29uc3QgSlNPTlJQQ05vdGlmaWNhdGlvblNjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICBqc29ucnBjOiB6LmxpdGVyYWwoSlNPTlJQQ19WRVJTSU9OKSxcbiAgICAuLi5Ob3RpZmljYXRpb25TY2hlbWEuc2hhcGVcbn0pXG4gICAgLnN0cmljdCgpO1xuZXhwb3J0IGNvbnN0IGlzSlNPTlJQQ05vdGlmaWNhdGlvbiA9ICh2YWx1ZSkgPT4gSlNPTlJQQ05vdGlmaWNhdGlvblNjaGVtYS5zYWZlUGFyc2UodmFsdWUpLnN1Y2Nlc3M7XG4vKipcbiAqIEEgc3VjY2Vzc2Z1bCAobm9uLWVycm9yKSByZXNwb25zZSB0byBhIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBKU09OUlBDUmVzdWx0UmVzcG9uc2VTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAganNvbnJwYzogei5saXRlcmFsKEpTT05SUENfVkVSU0lPTiksXG4gICAgaWQ6IFJlcXVlc3RJZFNjaGVtYSxcbiAgICByZXN1bHQ6IFJlc3VsdFNjaGVtYVxufSlcbiAgICAuc3RyaWN0KCk7XG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgdmFsaWQgSlNPTlJQQ1Jlc3VsdFJlc3BvbnNlLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgdmFsaWQgSlNPTlJQQ1Jlc3VsdFJlc3BvbnNlLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0pTT05SUENSZXN1bHRSZXNwb25zZSA9ICh2YWx1ZSkgPT4gSlNPTlJQQ1Jlc3VsdFJlc3BvbnNlU2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzcztcbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBpc0pTT05SUENSZXN1bHRSZXNwb25zZX0gaW5zdGVhZC5cbiAqXG4gKiBQbGVhc2Ugbm90ZSB0aGF0IHtAbGluayBKU09OUlBDUmVzcG9uc2V9IGlzIGEgdW5pb24gb2Yge0BsaW5rIEpTT05SUENSZXN1bHRSZXNwb25zZX0gYW5kIHtAbGluayBKU09OUlBDRXJyb3JSZXNwb25zZX0gYXMgcGVyIHRoZSB1cGRhdGVkIEpTT04tUlBDIHNwZWNpZmljYXRpb24uICh3YXMgcHJldmlvdXNseSBqdXN0IHtAbGluayBKU09OUlBDUmVzdWx0UmVzcG9uc2V9KVxuICovXG5leHBvcnQgY29uc3QgaXNKU09OUlBDUmVzcG9uc2UgPSBpc0pTT05SUENSZXN1bHRSZXNwb25zZTtcbi8qKlxuICogRXJyb3IgY29kZXMgZGVmaW5lZCBieSB0aGUgSlNPTi1SUEMgc3BlY2lmaWNhdGlvbi5cbiAqL1xuZXhwb3J0IHZhciBFcnJvckNvZGU7XG4oZnVuY3Rpb24gKEVycm9yQ29kZSkge1xuICAgIC8vIFNESyBlcnJvciBjb2Rlc1xuICAgIEVycm9yQ29kZVtFcnJvckNvZGVbXCJDb25uZWN0aW9uQ2xvc2VkXCJdID0gLTMyMDAwXSA9IFwiQ29ubmVjdGlvbkNsb3NlZFwiO1xuICAgIEVycm9yQ29kZVtFcnJvckNvZGVbXCJSZXF1ZXN0VGltZW91dFwiXSA9IC0zMjAwMV0gPSBcIlJlcXVlc3RUaW1lb3V0XCI7XG4gICAgLy8gU3RhbmRhcmQgSlNPTi1SUEMgZXJyb3IgY29kZXNcbiAgICBFcnJvckNvZGVbRXJyb3JDb2RlW1wiUGFyc2VFcnJvclwiXSA9IC0zMjcwMF0gPSBcIlBhcnNlRXJyb3JcIjtcbiAgICBFcnJvckNvZGVbRXJyb3JDb2RlW1wiSW52YWxpZFJlcXVlc3RcIl0gPSAtMzI2MDBdID0gXCJJbnZhbGlkUmVxdWVzdFwiO1xuICAgIEVycm9yQ29kZVtFcnJvckNvZGVbXCJNZXRob2ROb3RGb3VuZFwiXSA9IC0zMjYwMV0gPSBcIk1ldGhvZE5vdEZvdW5kXCI7XG4gICAgRXJyb3JDb2RlW0Vycm9yQ29kZVtcIkludmFsaWRQYXJhbXNcIl0gPSAtMzI2MDJdID0gXCJJbnZhbGlkUGFyYW1zXCI7XG4gICAgRXJyb3JDb2RlW0Vycm9yQ29kZVtcIkludGVybmFsRXJyb3JcIl0gPSAtMzI2MDNdID0gXCJJbnRlcm5hbEVycm9yXCI7XG4gICAgLy8gTUNQLXNwZWNpZmljIGVycm9yIGNvZGVzXG4gICAgRXJyb3JDb2RlW0Vycm9yQ29kZVtcIlVybEVsaWNpdGF0aW9uUmVxdWlyZWRcIl0gPSAtMzIwNDJdID0gXCJVcmxFbGljaXRhdGlvblJlcXVpcmVkXCI7XG59KShFcnJvckNvZGUgfHwgKEVycm9yQ29kZSA9IHt9KSk7XG4vKipcbiAqIEEgcmVzcG9uc2UgdG8gYSByZXF1ZXN0IHRoYXQgaW5kaWNhdGVzIGFuIGVycm9yIG9jY3VycmVkLlxuICovXG5leHBvcnQgY29uc3QgSlNPTlJQQ0Vycm9yUmVzcG9uc2VTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAganNvbnJwYzogei5saXRlcmFsKEpTT05SUENfVkVSU0lPTiksXG4gICAgaWQ6IFJlcXVlc3RJZFNjaGVtYS5vcHRpb25hbCgpLFxuICAgIGVycm9yOiB6Lm9iamVjdCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZXJyb3IgdHlwZSB0aGF0IG9jY3VycmVkLlxuICAgICAgICAgKi9cbiAgICAgICAgY29kZTogei5udW1iZXIoKS5pbnQoKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yLiBUaGUgbWVzc2FnZSBTSE9VTEQgYmUgbGltaXRlZCB0byBhIGNvbmNpc2Ugc2luZ2xlIHNlbnRlbmNlLlxuICAgICAgICAgKi9cbiAgICAgICAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yLiBUaGUgdmFsdWUgb2YgdGhpcyBtZW1iZXIgaXMgZGVmaW5lZCBieSB0aGUgc2VuZGVyIChlLmcuIGRldGFpbGVkIGVycm9yIGluZm9ybWF0aW9uLCBuZXN0ZWQgZXJyb3JzIGV0Yy4pLlxuICAgICAgICAgKi9cbiAgICAgICAgZGF0YTogei51bmtub3duKCkub3B0aW9uYWwoKVxuICAgIH0pXG59KVxuICAgIC5zdHJpY3QoKTtcbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBKU09OUlBDRXJyb3JSZXNwb25zZVNjaGVtYX0gaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEpTT05SUENFcnJvclNjaGVtYSA9IEpTT05SUENFcnJvclJlc3BvbnNlU2NoZW1hO1xuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBhIHZhbGlkIEpTT05SUENFcnJvclJlc3BvbnNlLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgdmFsaWQgSlNPTlJQQ0Vycm9yUmVzcG9uc2UsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzSlNPTlJQQ0Vycm9yUmVzcG9uc2UgPSAodmFsdWUpID0+IEpTT05SUENFcnJvclJlc3BvbnNlU2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzcztcbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBpc0pTT05SUENFcnJvclJlc3BvbnNlfSBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgaXNKU09OUlBDRXJyb3IgPSBpc0pTT05SUENFcnJvclJlc3BvbnNlO1xuZXhwb3J0IGNvbnN0IEpTT05SUENNZXNzYWdlU2NoZW1hID0gei51bmlvbihbXG4gICAgSlNPTlJQQ1JlcXVlc3RTY2hlbWEsXG4gICAgSlNPTlJQQ05vdGlmaWNhdGlvblNjaGVtYSxcbiAgICBKU09OUlBDUmVzdWx0UmVzcG9uc2VTY2hlbWEsXG4gICAgSlNPTlJQQ0Vycm9yUmVzcG9uc2VTY2hlbWFcbl0pO1xuZXhwb3J0IGNvbnN0IEpTT05SUENSZXNwb25zZVNjaGVtYSA9IHoudW5pb24oW0pTT05SUENSZXN1bHRSZXNwb25zZVNjaGVtYSwgSlNPTlJQQ0Vycm9yUmVzcG9uc2VTY2hlbWFdKTtcbi8qIEVtcHR5IHJlc3VsdCAqL1xuLyoqXG4gKiBBIHJlc3BvbnNlIHRoYXQgaW5kaWNhdGVzIHN1Y2Nlc3MgYnV0IGNhcnJpZXMgbm8gZGF0YS5cbiAqL1xuZXhwb3J0IGNvbnN0IEVtcHR5UmVzdWx0U2NoZW1hID0gUmVzdWx0U2NoZW1hLnN0cmljdCgpO1xuZXhwb3J0IGNvbnN0IENhbmNlbGxlZE5vdGlmaWNhdGlvblBhcmFtc1NjaGVtYSA9IE5vdGlmaWNhdGlvbnNQYXJhbXNTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBUaGUgSUQgb2YgdGhlIHJlcXVlc3QgdG8gY2FuY2VsLlxuICAgICAqXG4gICAgICogVGhpcyBNVVNUIGNvcnJlc3BvbmQgdG8gdGhlIElEIG9mIGEgcmVxdWVzdCBwcmV2aW91c2x5IGlzc3VlZCBpbiB0aGUgc2FtZSBkaXJlY3Rpb24uXG4gICAgICovXG4gICAgcmVxdWVzdElkOiBSZXF1ZXN0SWRTY2hlbWEub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBzdHJpbmcgZGVzY3JpYmluZyB0aGUgcmVhc29uIGZvciB0aGUgY2FuY2VsbGF0aW9uLiBUaGlzIE1BWSBiZSBsb2dnZWQgb3IgcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgICAqL1xuICAgIHJlYXNvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbi8qIENhbmNlbGxhdGlvbiAqL1xuLyoqXG4gKiBUaGlzIG5vdGlmaWNhdGlvbiBjYW4gYmUgc2VudCBieSBlaXRoZXIgc2lkZSB0byBpbmRpY2F0ZSB0aGF0IGl0IGlzIGNhbmNlbGxpbmcgYSBwcmV2aW91c2x5LWlzc3VlZCByZXF1ZXN0LlxuICpcbiAqIFRoZSByZXF1ZXN0IFNIT1VMRCBzdGlsbCBiZSBpbi1mbGlnaHQsIGJ1dCBkdWUgdG8gY29tbXVuaWNhdGlvbiBsYXRlbmN5LCBpdCBpcyBhbHdheXMgcG9zc2libGUgdGhhdCB0aGlzIG5vdGlmaWNhdGlvbiBNQVkgYXJyaXZlIGFmdGVyIHRoZSByZXF1ZXN0IGhhcyBhbHJlYWR5IGZpbmlzaGVkLlxuICpcbiAqIFRoaXMgbm90aWZpY2F0aW9uIGluZGljYXRlcyB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSB1bnVzZWQsIHNvIGFueSBhc3NvY2lhdGVkIHByb2Nlc3NpbmcgU0hPVUxEIGNlYXNlLlxuICpcbiAqIEEgY2xpZW50IE1VU1QgTk9UIGF0dGVtcHQgdG8gY2FuY2VsIGl0cyBgaW5pdGlhbGl6ZWAgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IENhbmNlbGxlZE5vdGlmaWNhdGlvblNjaGVtYSA9IE5vdGlmaWNhdGlvblNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKCdub3RpZmljYXRpb25zL2NhbmNlbGxlZCcpLFxuICAgIHBhcmFtczogQ2FuY2VsbGVkTm90aWZpY2F0aW9uUGFyYW1zU2NoZW1hXG59KTtcbi8qIEJhc2UgTWV0YWRhdGEgKi9cbi8qKlxuICogSWNvbiBzY2hlbWEgZm9yIHVzZSBpbiB0b29scywgcHJvbXB0cywgcmVzb3VyY2VzLCBhbmQgaW1wbGVtZW50YXRpb25zLlxuICovXG5leHBvcnQgY29uc3QgSWNvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAgICAgKiBVUkwgb3IgZGF0YSBVUkkgZm9yIHRoZSBpY29uLlxuICAgICAqL1xuICAgIHNyYzogei5zdHJpbmcoKSxcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBNSU1FIHR5cGUgZm9yIHRoZSBpY29uLlxuICAgICAqL1xuICAgIG1pbWVUeXBlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwgYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IHNwZWNpZnkgc2l6ZXMgYXQgd2hpY2ggdGhlIGljb24gY2FuIGJlIHVzZWQuXG4gICAgICogRWFjaCBzdHJpbmcgc2hvdWxkIGJlIGluIFd4SCBmb3JtYXQgKGUuZy4sIGBcIjQ4eDQ4XCJgLCBgXCI5Nng5NlwiYCkgb3IgYFwiYW55XCJgIGZvciBzY2FsYWJsZSBmb3JtYXRzIGxpa2UgU1ZHLlxuICAgICAqXG4gICAgICogSWYgbm90IHByb3ZpZGVkLCB0aGUgY2xpZW50IHNob3VsZCBhc3N1bWUgdGhhdCB0aGUgaWNvbiBjYW4gYmUgdXNlZCBhdCBhbnkgc2l6ZS5cbiAgICAgKi9cbiAgICBzaXplczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIHNwZWNpZmllciBmb3IgdGhlIHRoZW1lIHRoaXMgaWNvbiBpcyBkZXNpZ25lZCBmb3IuIGBsaWdodGAgaW5kaWNhdGVzXG4gICAgICogdGhlIGljb24gaXMgZGVzaWduZWQgdG8gYmUgdXNlZCB3aXRoIGEgbGlnaHQgYmFja2dyb3VuZCwgYW5kIGBkYXJrYCBpbmRpY2F0ZXNcbiAgICAgKiB0aGUgaWNvbiBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIHdpdGggYSBkYXJrIGJhY2tncm91bmQuXG4gICAgICpcbiAgICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBjbGllbnQgc2hvdWxkIGFzc3VtZSB0aGUgaWNvbiBjYW4gYmUgdXNlZCB3aXRoIGFueSB0aGVtZS5cbiAgICAgKi9cbiAgICB0aGVtZTogei5lbnVtKFsnbGlnaHQnLCAnZGFyayddKS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogQmFzZSBzY2hlbWEgdG8gYWRkIGBpY29uc2AgcHJvcGVydHkuXG4gKlxuICovXG5leHBvcnQgY29uc3QgSWNvbnNTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwgc2V0IG9mIHNpemVkIGljb25zIHRoYXQgdGhlIGNsaWVudCBjYW4gZGlzcGxheSBpbiBhIHVzZXIgaW50ZXJmYWNlLlxuICAgICAqXG4gICAgICogQ2xpZW50cyB0aGF0IHN1cHBvcnQgcmVuZGVyaW5nIGljb25zIE1VU1Qgc3VwcG9ydCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIE1JTUUgdHlwZXM6XG4gICAgICogLSBgaW1hZ2UvcG5nYCAtIFBORyBpbWFnZXMgKHNhZmUsIHVuaXZlcnNhbCBjb21wYXRpYmlsaXR5KVxuICAgICAqIC0gYGltYWdlL2pwZWdgIChhbmQgYGltYWdlL2pwZ2ApIC0gSlBFRyBpbWFnZXMgKHNhZmUsIHVuaXZlcnNhbCBjb21wYXRpYmlsaXR5KVxuICAgICAqXG4gICAgICogQ2xpZW50cyB0aGF0IHN1cHBvcnQgcmVuZGVyaW5nIGljb25zIFNIT1VMRCBhbHNvIHN1cHBvcnQ6XG4gICAgICogLSBgaW1hZ2Uvc3ZnK3htbGAgLSBTVkcgaW1hZ2VzIChzY2FsYWJsZSBidXQgcmVxdWlyZXMgc2VjdXJpdHkgcHJlY2F1dGlvbnMpXG4gICAgICogLSBgaW1hZ2Uvd2VicGAgLSBXZWJQIGltYWdlcyAobW9kZXJuLCBlZmZpY2llbnQgZm9ybWF0KVxuICAgICAqL1xuICAgIGljb25zOiB6LmFycmF5KEljb25TY2hlbWEpLm9wdGlvbmFsKClcbn0pO1xuLyoqXG4gKiBCYXNlIG1ldGFkYXRhIGludGVyZmFjZSBmb3IgY29tbW9uIHByb3BlcnRpZXMgYWNyb3NzIHJlc291cmNlcywgdG9vbHMsIHByb21wdHMsIGFuZCBpbXBsZW1lbnRhdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBCYXNlTWV0YWRhdGFTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqIEludGVuZGVkIGZvciBwcm9ncmFtbWF0aWMgb3IgbG9naWNhbCB1c2UsIGJ1dCB1c2VkIGFzIGEgZGlzcGxheSBuYW1lIGluIHBhc3Qgc3BlY3Mgb3IgZmFsbGJhY2sgKi9cbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIC8qKlxuICAgICAqIEludGVuZGVkIGZvciBVSSBhbmQgZW5kLXVzZXIgY29udGV4dHMg4oCUIG9wdGltaXplZCB0byBiZSBodW1hbi1yZWFkYWJsZSBhbmQgZWFzaWx5IHVuZGVyc3Rvb2QsXG4gICAgICogZXZlbiBieSB0aG9zZSB1bmZhbWlsaWFyIHdpdGggZG9tYWluLXNwZWNpZmljIHRlcm1pbm9sb2d5LlxuICAgICAqXG4gICAgICogSWYgbm90IHByb3ZpZGVkLCB0aGUgbmFtZSBzaG91bGQgYmUgdXNlZCBmb3IgZGlzcGxheSAoZXhjZXB0IGZvciBUb29sLFxuICAgICAqIHdoZXJlIGBhbm5vdGF0aW9ucy50aXRsZWAgc2hvdWxkIGJlIGdpdmVuIHByZWNlZGVuY2Ugb3ZlciB1c2luZyBgbmFtZWAsXG4gICAgICogaWYgcHJlc2VudCkuXG4gICAgICovXG4gICAgdGl0bGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG4vKiBJbml0aWFsaXphdGlvbiAqL1xuLyoqXG4gKiBEZXNjcmliZXMgdGhlIG5hbWUgYW5kIHZlcnNpb24gb2YgYW4gTUNQIGltcGxlbWVudGF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgSW1wbGVtZW50YXRpb25TY2hlbWEgPSBCYXNlTWV0YWRhdGFTY2hlbWEuZXh0ZW5kKHtcbiAgICAuLi5CYXNlTWV0YWRhdGFTY2hlbWEuc2hhcGUsXG4gICAgLi4uSWNvbnNTY2hlbWEuc2hhcGUsXG4gICAgdmVyc2lvbjogei5zdHJpbmcoKSxcbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBVUkwgb2YgdGhlIHdlYnNpdGUgZm9yIHRoaXMgaW1wbGVtZW50YXRpb24uXG4gICAgICovXG4gICAgd2Vic2l0ZVVybDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzLlxuICAgICAqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCBieSBjbGllbnRzIG9yIHNlcnZlcnMgdG8gcHJvdmlkZSBjb250ZXh0IGFib3V0IHRoZWlyIHB1cnBvc2VcbiAgICAgKiBhbmQgY2FwYWJpbGl0aWVzLiBGb3IgZXhhbXBsZSwgYSBzZXJ2ZXIgbWlnaHQgZGVzY3JpYmUgdGhlIHR5cGVzIG9mIHJlc291cmNlc1xuICAgICAqIG9yIHRvb2xzIGl0IHByb3ZpZGVzLCB3aGlsZSBhIGNsaWVudCBtaWdodCBkZXNjcmliZSBpdHMgaW50ZW5kZWQgdXNlIGNhc2UuXG4gICAgICovXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBGb3JtRWxpY2l0YXRpb25DYXBhYmlsaXR5U2NoZW1hID0gei5pbnRlcnNlY3Rpb24oei5vYmplY3Qoe1xuICAgIGFwcGx5RGVmYXVsdHM6IHouYm9vbGVhbigpLm9wdGlvbmFsKClcbn0pLCB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkpO1xuY29uc3QgRWxpY2l0YXRpb25DYXBhYmlsaXR5U2NoZW1hID0gei5wcmVwcm9jZXNzKHZhbHVlID0+IHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7IGZvcm06IHt9IH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufSwgei5pbnRlcnNlY3Rpb24oei5vYmplY3Qoe1xuICAgIGZvcm06IEZvcm1FbGljaXRhdGlvbkNhcGFiaWxpdHlTY2hlbWEub3B0aW9uYWwoKSxcbiAgICB1cmw6IEFzc2VydE9iamVjdFNjaGVtYS5vcHRpb25hbCgpXG59KSwgei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCkpKTtcbi8qKlxuICogVGFzayBjYXBhYmlsaXRpZXMgZm9yIGNsaWVudHMsIGluZGljYXRpbmcgd2hpY2ggcmVxdWVzdCB0eXBlcyBzdXBwb3J0IHRhc2sgY3JlYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBDbGllbnRUYXNrc0NhcGFiaWxpdHlTY2hlbWEgPSB6Lmxvb3NlT2JqZWN0KHtcbiAgICAvKipcbiAgICAgKiBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3VwcG9ydHMgbGlzdGluZyB0YXNrcy5cbiAgICAgKi9cbiAgICBsaXN0OiBBc3NlcnRPYmplY3RTY2hlbWEub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3VwcG9ydHMgY2FuY2VsbGluZyB0YXNrcy5cbiAgICAgKi9cbiAgICBjYW5jZWw6IEFzc2VydE9iamVjdFNjaGVtYS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIENhcGFiaWxpdGllcyBmb3IgdGFzayBjcmVhdGlvbiBvbiBzcGVjaWZpYyByZXF1ZXN0IHR5cGVzLlxuICAgICAqL1xuICAgIHJlcXVlc3RzOiB6XG4gICAgICAgIC5sb29zZU9iamVjdCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUYXNrIHN1cHBvcnQgZm9yIHNhbXBsaW5nIHJlcXVlc3RzLlxuICAgICAgICAgKi9cbiAgICAgICAgc2FtcGxpbmc6IHpcbiAgICAgICAgICAgIC5sb29zZU9iamVjdCh7XG4gICAgICAgICAgICBjcmVhdGVNZXNzYWdlOiBBc3NlcnRPYmplY3RTY2hlbWEub3B0aW9uYWwoKVxuICAgICAgICB9KVxuICAgICAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUYXNrIHN1cHBvcnQgZm9yIGVsaWNpdGF0aW9uIHJlcXVlc3RzLlxuICAgICAgICAgKi9cbiAgICAgICAgZWxpY2l0YXRpb246IHpcbiAgICAgICAgICAgIC5sb29zZU9iamVjdCh7XG4gICAgICAgICAgICBjcmVhdGU6IEFzc2VydE9iamVjdFNjaGVtYS5vcHRpb25hbCgpXG4gICAgICAgIH0pXG4gICAgICAgICAgICAub3B0aW9uYWwoKVxuICAgIH0pXG4gICAgICAgIC5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogVGFzayBjYXBhYmlsaXRpZXMgZm9yIHNlcnZlcnMsIGluZGljYXRpbmcgd2hpY2ggcmVxdWVzdCB0eXBlcyBzdXBwb3J0IHRhc2sgY3JlYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJUYXNrc0NhcGFiaWxpdHlTY2hlbWEgPSB6Lmxvb3NlT2JqZWN0KHtcbiAgICAvKipcbiAgICAgKiBQcmVzZW50IGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgbGlzdGluZyB0YXNrcy5cbiAgICAgKi9cbiAgICBsaXN0OiBBc3NlcnRPYmplY3RTY2hlbWEub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBQcmVzZW50IGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgY2FuY2VsbGluZyB0YXNrcy5cbiAgICAgKi9cbiAgICBjYW5jZWw6IEFzc2VydE9iamVjdFNjaGVtYS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIENhcGFiaWxpdGllcyBmb3IgdGFzayBjcmVhdGlvbiBvbiBzcGVjaWZpYyByZXF1ZXN0IHR5cGVzLlxuICAgICAqL1xuICAgIHJlcXVlc3RzOiB6XG4gICAgICAgIC5sb29zZU9iamVjdCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUYXNrIHN1cHBvcnQgZm9yIHRvb2wgcmVxdWVzdHMuXG4gICAgICAgICAqL1xuICAgICAgICB0b29sczogelxuICAgICAgICAgICAgLmxvb3NlT2JqZWN0KHtcbiAgICAgICAgICAgIGNhbGw6IEFzc2VydE9iamVjdFNjaGVtYS5vcHRpb25hbCgpXG4gICAgICAgIH0pXG4gICAgICAgICAgICAub3B0aW9uYWwoKVxuICAgIH0pXG4gICAgICAgIC5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogQ2FwYWJpbGl0aWVzIGEgY2xpZW50IG1heSBzdXBwb3J0LiBLbm93biBjYXBhYmlsaXRpZXMgYXJlIGRlZmluZWQgaGVyZSwgaW4gdGhpcyBzY2hlbWEsIGJ1dCB0aGlzIGlzIG5vdCBhIGNsb3NlZCBzZXQ6IGFueSBjbGllbnQgY2FuIGRlZmluZSBpdHMgb3duLCBhZGRpdGlvbmFsIGNhcGFiaWxpdGllcy5cbiAqL1xuZXhwb3J0IGNvbnN0IENsaWVudENhcGFiaWxpdGllc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAgICAgKiBFeHBlcmltZW50YWwsIG5vbi1zdGFuZGFyZCBjYXBhYmlsaXRpZXMgdGhhdCB0aGUgY2xpZW50IHN1cHBvcnRzLlxuICAgICAqL1xuICAgIGV4cGVyaW1lbnRhbDogei5yZWNvcmQoei5zdHJpbmcoKSwgQXNzZXJ0T2JqZWN0U2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzdXBwb3J0cyBzYW1wbGluZyBmcm9tIGFuIExMTS5cbiAgICAgKi9cbiAgICBzYW1wbGluZzogelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzdXBwb3J0cyBjb250ZXh0IGluY2x1c2lvbiB2aWEgaW5jbHVkZUNvbnRleHQgcGFyYW1ldGVyLlxuICAgICAgICAgKiBJZiBub3QgZGVjbGFyZWQsIHNlcnZlcnMgU0hPVUxEIG9ubHkgdXNlIGBpbmNsdWRlQ29udGV4dDogXCJub25lXCJgIChvciBvbWl0IGl0KS5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnRleHQ6IEFzc2VydE9iamVjdFNjaGVtYS5vcHRpb25hbCgpLFxuICAgICAgICAvKipcbiAgICAgICAgICogUHJlc2VudCBpZiB0aGUgY2xpZW50IHN1cHBvcnRzIHRvb2wgdXNlIHZpYSB0b29scyBhbmQgdG9vbENob2ljZSBwYXJhbWV0ZXJzLlxuICAgICAgICAgKi9cbiAgICAgICAgdG9vbHM6IEFzc2VydE9iamVjdFNjaGVtYS5vcHRpb25hbCgpXG4gICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgLyoqXG4gICAgICogUHJlc2VudCBpZiB0aGUgY2xpZW50IHN1cHBvcnRzIGVsaWNpdGluZyB1c2VyIGlucHV0LlxuICAgICAqL1xuICAgIGVsaWNpdGF0aW9uOiBFbGljaXRhdGlvbkNhcGFiaWxpdHlTY2hlbWEub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3VwcG9ydHMgbGlzdGluZyByb290cy5cbiAgICAgKi9cbiAgICByb290czogelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZXRoZXIgdGhlIGNsaWVudCBzdXBwb3J0cyBpc3N1aW5nIG5vdGlmaWNhdGlvbnMgZm9yIGNoYW5nZXMgdG8gdGhlIHJvb3RzIGxpc3QuXG4gICAgICAgICAqL1xuICAgICAgICBsaXN0Q2hhbmdlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKVxuICAgIH0pXG4gICAgICAgIC5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzdXBwb3J0cyB0YXNrIGNyZWF0aW9uLlxuICAgICAqL1xuICAgIHRhc2tzOiBDbGllbnRUYXNrc0NhcGFiaWxpdHlTY2hlbWEub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBFeHRlbnNpb25zIHRoYXQgdGhlIGNsaWVudCBzdXBwb3J0cy4gS2V5cyBhcmUgZXh0ZW5zaW9uIGlkZW50aWZpZXJzICh2ZW5kb3ItcHJlZml4L2V4dGVuc2lvbi1uYW1lKS5cbiAgICAgKi9cbiAgICBleHRlbnNpb25zOiB6LnJlY29yZCh6LnN0cmluZygpLCBBc3NlcnRPYmplY3RTY2hlbWEpLm9wdGlvbmFsKClcbn0pO1xuZXhwb3J0IGNvbnN0IEluaXRpYWxpemVSZXF1ZXN0UGFyYW1zU2NoZW1hID0gQmFzZVJlcXVlc3RQYXJhbXNTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIE1vZGVsIENvbnRleHQgUHJvdG9jb2wgdGhhdCB0aGUgY2xpZW50IHN1cHBvcnRzLiBUaGUgY2xpZW50IE1BWSBkZWNpZGUgdG8gc3VwcG9ydCBvbGRlciB2ZXJzaW9ucyBhcyB3ZWxsLlxuICAgICAqL1xuICAgIHByb3RvY29sVmVyc2lvbjogei5zdHJpbmcoKSxcbiAgICBjYXBhYmlsaXRpZXM6IENsaWVudENhcGFiaWxpdGllc1NjaGVtYSxcbiAgICBjbGllbnRJbmZvOiBJbXBsZW1lbnRhdGlvblNjaGVtYVxufSk7XG4vKipcbiAqIFRoaXMgcmVxdWVzdCBpcyBzZW50IGZyb20gdGhlIGNsaWVudCB0byB0aGUgc2VydmVyIHdoZW4gaXQgZmlyc3QgY29ubmVjdHMsIGFza2luZyBpdCB0byBiZWdpbiBpbml0aWFsaXphdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEluaXRpYWxpemVSZXF1ZXN0U2NoZW1hID0gUmVxdWVzdFNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKCdpbml0aWFsaXplJyksXG4gICAgcGFyYW1zOiBJbml0aWFsaXplUmVxdWVzdFBhcmFtc1NjaGVtYVxufSk7XG5leHBvcnQgY29uc3QgaXNJbml0aWFsaXplUmVxdWVzdCA9ICh2YWx1ZSkgPT4gSW5pdGlhbGl6ZVJlcXVlc3RTY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzO1xuLyoqXG4gKiBDYXBhYmlsaXRpZXMgdGhhdCBhIHNlcnZlciBtYXkgc3VwcG9ydC4gS25vd24gY2FwYWJpbGl0aWVzIGFyZSBkZWZpbmVkIGhlcmUsIGluIHRoaXMgc2NoZW1hLCBidXQgdGhpcyBpcyBub3QgYSBjbG9zZWQgc2V0OiBhbnkgc2VydmVyIGNhbiBkZWZpbmUgaXRzIG93biwgYWRkaXRpb25hbCBjYXBhYmlsaXRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJDYXBhYmlsaXRpZXNTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gICAgICogRXhwZXJpbWVudGFsLCBub24tc3RhbmRhcmQgY2FwYWJpbGl0aWVzIHRoYXQgdGhlIHNlcnZlciBzdXBwb3J0cy5cbiAgICAgKi9cbiAgICBleHBlcmltZW50YWw6IHoucmVjb3JkKHouc3RyaW5nKCksIEFzc2VydE9iamVjdFNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBQcmVzZW50IGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgc2VuZGluZyBsb2cgbWVzc2FnZXMgdG8gdGhlIGNsaWVudC5cbiAgICAgKi9cbiAgICBsb2dnaW5nOiBBc3NlcnRPYmplY3RTY2hlbWEub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBQcmVzZW50IGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgc2VuZGluZyBjb21wbGV0aW9ucyB0byB0aGUgY2xpZW50LlxuICAgICAqL1xuICAgIGNvbXBsZXRpb25zOiBBc3NlcnRPYmplY3RTY2hlbWEub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBQcmVzZW50IGlmIHRoZSBzZXJ2ZXIgb2ZmZXJzIGFueSBwcm9tcHQgdGVtcGxhdGVzLlxuICAgICAqL1xuICAgIHByb21wdHM6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgc2VydmVyIHN1cHBvcnRzIGlzc3Vpbmcgbm90aWZpY2F0aW9ucyBmb3IgY2hhbmdlcyB0byB0aGUgcHJvbXB0IGxpc3QuXG4gICAgICAgICAqL1xuICAgICAgICBsaXN0Q2hhbmdlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKVxuICAgIH0pXG4gICAgICAgIC5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIFByZXNlbnQgaWYgdGhlIHNlcnZlciBvZmZlcnMgYW55IHJlc291cmNlcyB0byByZWFkLlxuICAgICAqL1xuICAgIHJlc291cmNlczogelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZXRoZXIgdGhpcyBzZXJ2ZXIgc3VwcG9ydHMgY2xpZW50cyBzdWJzY3JpYmluZyB0byByZXNvdXJjZSB1cGRhdGVzLlxuICAgICAgICAgKi9cbiAgICAgICAgc3Vic2NyaWJlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgICAgICAvKipcbiAgICAgICAgICogV2hldGhlciB0aGlzIHNlcnZlciBzdXBwb3J0cyBpc3N1aW5nIG5vdGlmaWNhdGlvbnMgZm9yIGNoYW5nZXMgdG8gdGhlIHJlc291cmNlIGxpc3QuXG4gICAgICAgICAqL1xuICAgICAgICBsaXN0Q2hhbmdlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKVxuICAgIH0pXG4gICAgICAgIC5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIFByZXNlbnQgaWYgdGhlIHNlcnZlciBvZmZlcnMgYW55IHRvb2xzIHRvIGNhbGwuXG4gICAgICovXG4gICAgdG9vbHM6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGV0aGVyIHRoaXMgc2VydmVyIHN1cHBvcnRzIGlzc3Vpbmcgbm90aWZpY2F0aW9ucyBmb3IgY2hhbmdlcyB0byB0aGUgdG9vbCBsaXN0LlxuICAgICAgICAgKi9cbiAgICAgICAgbGlzdENoYW5nZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKClcbiAgICB9KVxuICAgICAgICAub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBQcmVzZW50IGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgdGFzayBjcmVhdGlvbi5cbiAgICAgKi9cbiAgICB0YXNrczogU2VydmVyVGFza3NDYXBhYmlsaXR5U2NoZW1hLm9wdGlvbmFsKCksXG4gICAgLyoqXG4gICAgICogRXh0ZW5zaW9ucyB0aGF0IHRoZSBzZXJ2ZXIgc3VwcG9ydHMuIEtleXMgYXJlIGV4dGVuc2lvbiBpZGVudGlmaWVycyAodmVuZG9yLXByZWZpeC9leHRlbnNpb24tbmFtZSkuXG4gICAgICovXG4gICAgZXh0ZW5zaW9uczogei5yZWNvcmQoei5zdHJpbmcoKSwgQXNzZXJ0T2JqZWN0U2NoZW1hKS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogQWZ0ZXIgcmVjZWl2aW5nIGFuIGluaXRpYWxpemUgcmVxdWVzdCBmcm9tIHRoZSBjbGllbnQsIHRoZSBzZXJ2ZXIgc2VuZHMgdGhpcyByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEluaXRpYWxpemVSZXN1bHRTY2hlbWEgPSBSZXN1bHRTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgTW9kZWwgQ29udGV4dCBQcm90b2NvbCB0aGF0IHRoZSBzZXJ2ZXIgd2FudHMgdG8gdXNlLiBUaGlzIG1heSBub3QgbWF0Y2ggdGhlIHZlcnNpb24gdGhhdCB0aGUgY2xpZW50IHJlcXVlc3RlZC4gSWYgdGhlIGNsaWVudCBjYW5ub3Qgc3VwcG9ydCB0aGlzIHZlcnNpb24sIGl0IE1VU1QgZGlzY29ubmVjdC5cbiAgICAgKi9cbiAgICBwcm90b2NvbFZlcnNpb246IHouc3RyaW5nKCksXG4gICAgY2FwYWJpbGl0aWVzOiBTZXJ2ZXJDYXBhYmlsaXRpZXNTY2hlbWEsXG4gICAgc2VydmVySW5mbzogSW1wbGVtZW50YXRpb25TY2hlbWEsXG4gICAgLyoqXG4gICAgICogSW5zdHJ1Y3Rpb25zIGRlc2NyaWJpbmcgaG93IHRvIHVzZSB0aGUgc2VydmVyIGFuZCBpdHMgZmVhdHVyZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGJ5IGNsaWVudHMgdG8gaW1wcm92ZSB0aGUgTExNJ3MgdW5kZXJzdGFuZGluZyBvZiBhdmFpbGFibGUgdG9vbHMsIHJlc291cmNlcywgZXRjLiBJdCBjYW4gYmUgdGhvdWdodCBvZiBsaWtlIGEgXCJoaW50XCIgdG8gdGhlIG1vZGVsLiBGb3IgZXhhbXBsZSwgdGhpcyBpbmZvcm1hdGlvbiBNQVkgYmUgYWRkZWQgdG8gdGhlIHN5c3RlbSBwcm9tcHQuXG4gICAgICovXG4gICAgaW5zdHJ1Y3Rpb25zOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuLyoqXG4gKiBUaGlzIG5vdGlmaWNhdGlvbiBpcyBzZW50IGZyb20gdGhlIGNsaWVudCB0byB0aGUgc2VydmVyIGFmdGVyIGluaXRpYWxpemF0aW9uIGhhcyBmaW5pc2hlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEluaXRpYWxpemVkTm90aWZpY2F0aW9uU2NoZW1hID0gTm90aWZpY2F0aW9uU2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoJ25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQnKSxcbiAgICBwYXJhbXM6IE5vdGlmaWNhdGlvbnNQYXJhbXNTY2hlbWEub3B0aW9uYWwoKVxufSk7XG5leHBvcnQgY29uc3QgaXNJbml0aWFsaXplZE5vdGlmaWNhdGlvbiA9ICh2YWx1ZSkgPT4gSW5pdGlhbGl6ZWROb3RpZmljYXRpb25TY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzO1xuLyogUGluZyAqL1xuLyoqXG4gKiBBIHBpbmcsIGlzc3VlZCBieSBlaXRoZXIgdGhlIHNlcnZlciBvciB0aGUgY2xpZW50LCB0byBjaGVjayB0aGF0IHRoZSBvdGhlciBwYXJ0eSBpcyBzdGlsbCBhbGl2ZS4gVGhlIHJlY2VpdmVyIG11c3QgcHJvbXB0bHkgcmVzcG9uZCwgb3IgZWxzZSBtYXkgYmUgZGlzY29ubmVjdGVkLlxuICovXG5leHBvcnQgY29uc3QgUGluZ1JlcXVlc3RTY2hlbWEgPSBSZXF1ZXN0U2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoJ3BpbmcnKSxcbiAgICBwYXJhbXM6IEJhc2VSZXF1ZXN0UGFyYW1zU2NoZW1hLm9wdGlvbmFsKClcbn0pO1xuLyogUHJvZ3Jlc3Mgbm90aWZpY2F0aW9ucyAqL1xuZXhwb3J0IGNvbnN0IFByb2dyZXNzU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICAgICAqIFRoZSBwcm9ncmVzcyB0aHVzIGZhci4gVGhpcyBzaG91bGQgaW5jcmVhc2UgZXZlcnkgdGltZSBwcm9ncmVzcyBpcyBtYWRlLCBldmVuIGlmIHRoZSB0b3RhbCBpcyB1bmtub3duLlxuICAgICAqL1xuICAgIHByb2dyZXNzOiB6Lm51bWJlcigpLFxuICAgIC8qKlxuICAgICAqIFRvdGFsIG51bWJlciBvZiBpdGVtcyB0byBwcm9jZXNzIChvciB0b3RhbCBwcm9ncmVzcyByZXF1aXJlZCksIGlmIGtub3duLlxuICAgICAqL1xuICAgIHRvdGFsOiB6Lm9wdGlvbmFsKHoubnVtYmVyKCkpLFxuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIG1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgY3VycmVudCBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBtZXNzYWdlOiB6Lm9wdGlvbmFsKHouc3RyaW5nKCkpXG59KTtcbmV4cG9ydCBjb25zdCBQcm9ncmVzc05vdGlmaWNhdGlvblBhcmFtc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAuLi5Ob3RpZmljYXRpb25zUGFyYW1zU2NoZW1hLnNoYXBlLFxuICAgIC4uLlByb2dyZXNzU2NoZW1hLnNoYXBlLFxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9ncmVzcyB0b2tlbiB3aGljaCB3YXMgZ2l2ZW4gaW4gdGhlIGluaXRpYWwgcmVxdWVzdCwgdXNlZCB0byBhc3NvY2lhdGUgdGhpcyBub3RpZmljYXRpb24gd2l0aCB0aGUgcmVxdWVzdCB0aGF0IGlzIHByb2NlZWRpbmcuXG4gICAgICovXG4gICAgcHJvZ3Jlc3NUb2tlbjogUHJvZ3Jlc3NUb2tlblNjaGVtYVxufSk7XG4vKipcbiAqIEFuIG91dC1vZi1iYW5kIG5vdGlmaWNhdGlvbiB1c2VkIHRvIGluZm9ybSB0aGUgcmVjZWl2ZXIgb2YgYSBwcm9ncmVzcyB1cGRhdGUgZm9yIGEgbG9uZy1ydW5uaW5nIHJlcXVlc3QuXG4gKlxuICogQGNhdGVnb3J5IG5vdGlmaWNhdGlvbnMvcHJvZ3Jlc3NcbiAqL1xuZXhwb3J0IGNvbnN0IFByb2dyZXNzTm90aWZpY2F0aW9uU2NoZW1hID0gTm90aWZpY2F0aW9uU2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoJ25vdGlmaWNhdGlvbnMvcHJvZ3Jlc3MnKSxcbiAgICBwYXJhbXM6IFByb2dyZXNzTm90aWZpY2F0aW9uUGFyYW1zU2NoZW1hXG59KTtcbmV4cG9ydCBjb25zdCBQYWdpbmF0ZWRSZXF1ZXN0UGFyYW1zU2NoZW1hID0gQmFzZVJlcXVlc3RQYXJhbXNTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBBbiBvcGFxdWUgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHBhZ2luYXRpb24gcG9zaXRpb24uXG4gICAgICogSWYgcHJvdmlkZWQsIHRoZSBzZXJ2ZXIgc2hvdWxkIHJldHVybiByZXN1bHRzIHN0YXJ0aW5nIGFmdGVyIHRoaXMgY3Vyc29yLlxuICAgICAqL1xuICAgIGN1cnNvcjogQ3Vyc29yU2NoZW1hLm9wdGlvbmFsKClcbn0pO1xuLyogUGFnaW5hdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFBhZ2luYXRlZFJlcXVlc3RTY2hlbWEgPSBSZXF1ZXN0U2NoZW1hLmV4dGVuZCh7XG4gICAgcGFyYW1zOiBQYWdpbmF0ZWRSZXF1ZXN0UGFyYW1zU2NoZW1hLm9wdGlvbmFsKClcbn0pO1xuZXhwb3J0IGNvbnN0IFBhZ2luYXRlZFJlc3VsdFNjaGVtYSA9IFJlc3VsdFNjaGVtYS5leHRlbmQoe1xuICAgIC8qKlxuICAgICAqIEFuIG9wYXF1ZSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIHBhZ2luYXRpb24gcG9zaXRpb24gYWZ0ZXIgdGhlIGxhc3QgcmV0dXJuZWQgcmVzdWx0LlxuICAgICAqIElmIHByZXNlbnQsIHRoZXJlIG1heSBiZSBtb3JlIHJlc3VsdHMgYXZhaWxhYmxlLlxuICAgICAqL1xuICAgIG5leHRDdXJzb3I6IEN1cnNvclNjaGVtYS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogVGhlIHN0YXR1cyBvZiBhIHRhc2suXG4gKiAqL1xuZXhwb3J0IGNvbnN0IFRhc2tTdGF0dXNTY2hlbWEgPSB6LmVudW0oWyd3b3JraW5nJywgJ2lucHV0X3JlcXVpcmVkJywgJ2NvbXBsZXRlZCcsICdmYWlsZWQnLCAnY2FuY2VsbGVkJ10pO1xuLyogVGFza3MgKi9cbi8qKlxuICogQSBwb2xsYWJsZSBzdGF0ZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIGEgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRhc2tTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgdGFza0lkOiB6LnN0cmluZygpLFxuICAgIHN0YXR1czogVGFza1N0YXR1c1NjaGVtYSxcbiAgICAvKipcbiAgICAgKiBUaW1lIGluIG1pbGxpc2Vjb25kcyB0byBrZWVwIHRhc2sgcmVzdWx0cyBhdmFpbGFibGUgYWZ0ZXIgY29tcGxldGlvbi5cbiAgICAgKiBJZiBudWxsLCB0aGUgdGFzayBoYXMgdW5saW1pdGVkIGxpZmV0aW1lIHVudGlsIG1hbnVhbGx5IGNsZWFuZWQgdXAuXG4gICAgICovXG4gICAgdHRsOiB6LnVuaW9uKFt6Lm51bWJlcigpLCB6Lm51bGwoKV0pLFxuICAgIC8qKlxuICAgICAqIElTTyA4NjAxIHRpbWVzdGFtcCB3aGVuIHRoZSB0YXNrIHdhcyBjcmVhdGVkLlxuICAgICAqL1xuICAgIGNyZWF0ZWRBdDogei5zdHJpbmcoKSxcbiAgICAvKipcbiAgICAgKiBJU08gODYwMSB0aW1lc3RhbXAgd2hlbiB0aGUgdGFzayB3YXMgbGFzdCB1cGRhdGVkLlxuICAgICAqL1xuICAgIGxhc3RVcGRhdGVkQXQ6IHouc3RyaW5nKCksXG4gICAgcG9sbEludGVydmFsOiB6Lm9wdGlvbmFsKHoubnVtYmVyKCkpLFxuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIGRpYWdub3N0aWMgbWVzc2FnZSBmb3IgZmFpbGVkIHRhc2tzIG9yIG90aGVyIHN0YXR1cyBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBzdGF0dXNNZXNzYWdlOiB6Lm9wdGlvbmFsKHouc3RyaW5nKCkpXG59KTtcbi8qKlxuICogUmVzdWx0IHJldHVybmVkIHdoZW4gYSB0YXNrIGlzIGNyZWF0ZWQsIGNvbnRhaW5pbmcgdGhlIHRhc2sgZGF0YSB3cmFwcGVkIGluIGEgdGFzayBmaWVsZC5cbiAqL1xuZXhwb3J0IGNvbnN0IENyZWF0ZVRhc2tSZXN1bHRTY2hlbWEgPSBSZXN1bHRTY2hlbWEuZXh0ZW5kKHtcbiAgICB0YXNrOiBUYXNrU2NoZW1hXG59KTtcbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGFzayBzdGF0dXMgbm90aWZpY2F0aW9uLlxuICovXG5leHBvcnQgY29uc3QgVGFza1N0YXR1c05vdGlmaWNhdGlvblBhcmFtc1NjaGVtYSA9IE5vdGlmaWNhdGlvbnNQYXJhbXNTY2hlbWEubWVyZ2UoVGFza1NjaGVtYSk7XG4vKipcbiAqIEEgbm90aWZpY2F0aW9uIHNlbnQgd2hlbiBhIHRhc2sncyBzdGF0dXMgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFRhc2tTdGF0dXNOb3RpZmljYXRpb25TY2hlbWEgPSBOb3RpZmljYXRpb25TY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbCgnbm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMnKSxcbiAgICBwYXJhbXM6IFRhc2tTdGF0dXNOb3RpZmljYXRpb25QYXJhbXNTY2hlbWFcbn0pO1xuLyoqXG4gKiBBIHJlcXVlc3QgdG8gZ2V0IHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIHRhc2suXG4gKi9cbmV4cG9ydCBjb25zdCBHZXRUYXNrUmVxdWVzdFNjaGVtYSA9IFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbCgndGFza3MvZ2V0JyksXG4gICAgcGFyYW1zOiBCYXNlUmVxdWVzdFBhcmFtc1NjaGVtYS5leHRlbmQoe1xuICAgICAgICB0YXNrSWQ6IHouc3RyaW5nKClcbiAgICB9KVxufSk7XG4vKipcbiAqIFRoZSByZXNwb25zZSB0byBhIHRhc2tzL2dldCByZXF1ZXN0LlxuICovXG5leHBvcnQgY29uc3QgR2V0VGFza1Jlc3VsdFNjaGVtYSA9IFJlc3VsdFNjaGVtYS5tZXJnZShUYXNrU2NoZW1hKTtcbi8qKlxuICogQSByZXF1ZXN0IHRvIGdldCB0aGUgcmVzdWx0IG9mIGEgc3BlY2lmaWMgdGFzay5cbiAqL1xuZXhwb3J0IGNvbnN0IEdldFRhc2tQYXlsb2FkUmVxdWVzdFNjaGVtYSA9IFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbCgndGFza3MvcmVzdWx0JyksXG4gICAgcGFyYW1zOiBCYXNlUmVxdWVzdFBhcmFtc1NjaGVtYS5leHRlbmQoe1xuICAgICAgICB0YXNrSWQ6IHouc3RyaW5nKClcbiAgICB9KVxufSk7XG4vKipcbiAqIFRoZSByZXNwb25zZSB0byBhIHRhc2tzL3Jlc3VsdCByZXF1ZXN0LlxuICogVGhlIHN0cnVjdHVyZSBtYXRjaGVzIHRoZSByZXN1bHQgdHlwZSBvZiB0aGUgb3JpZ2luYWwgcmVxdWVzdC5cbiAqIEZvciBleGFtcGxlLCBhIHRvb2xzL2NhbGwgdGFzayB3b3VsZCByZXR1cm4gdGhlIENhbGxUb29sUmVzdWx0IHN0cnVjdHVyZS5cbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBHZXRUYXNrUGF5bG9hZFJlc3VsdFNjaGVtYSA9IFJlc3VsdFNjaGVtYS5sb29zZSgpO1xuLyoqXG4gKiBBIHJlcXVlc3QgdG8gbGlzdCB0YXNrcy5cbiAqL1xuZXhwb3J0IGNvbnN0IExpc3RUYXNrc1JlcXVlc3RTY2hlbWEgPSBQYWdpbmF0ZWRSZXF1ZXN0U2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoJ3Rhc2tzL2xpc3QnKVxufSk7XG4vKipcbiAqIFRoZSByZXNwb25zZSB0byBhIHRhc2tzL2xpc3QgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IExpc3RUYXNrc1Jlc3VsdFNjaGVtYSA9IFBhZ2luYXRlZFJlc3VsdFNjaGVtYS5leHRlbmQoe1xuICAgIHRhc2tzOiB6LmFycmF5KFRhc2tTY2hlbWEpXG59KTtcbi8qKlxuICogQSByZXF1ZXN0IHRvIGNhbmNlbCBhIHNwZWNpZmljIHRhc2suXG4gKi9cbmV4cG9ydCBjb25zdCBDYW5jZWxUYXNrUmVxdWVzdFNjaGVtYSA9IFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbCgndGFza3MvY2FuY2VsJyksXG4gICAgcGFyYW1zOiBCYXNlUmVxdWVzdFBhcmFtc1NjaGVtYS5leHRlbmQoe1xuICAgICAgICB0YXNrSWQ6IHouc3RyaW5nKClcbiAgICB9KVxufSk7XG4vKipcbiAqIFRoZSByZXNwb25zZSB0byBhIHRhc2tzL2NhbmNlbCByZXF1ZXN0LlxuICovXG5leHBvcnQgY29uc3QgQ2FuY2VsVGFza1Jlc3VsdFNjaGVtYSA9IFJlc3VsdFNjaGVtYS5tZXJnZShUYXNrU2NoZW1hKTtcbi8qIFJlc291cmNlcyAqL1xuLyoqXG4gKiBUaGUgY29udGVudHMgb2YgYSBzcGVjaWZpYyByZXNvdXJjZSBvciBzdWItcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNvbnRlbnRzU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICAgICAqIFRoZSBVUkkgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKi9cbiAgICB1cmk6IHouc3RyaW5nKCksXG4gICAgLyoqXG4gICAgICogVGhlIE1JTUUgdHlwZSBvZiB0aGlzIHJlc291cmNlLCBpZiBrbm93bi5cbiAgICAgKi9cbiAgICBtaW1lVHlwZTogei5vcHRpb25hbCh6LnN0cmluZygpKSxcbiAgICAvKipcbiAgICAgKiBTZWUgW01DUCBzcGVjaWZpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vbW9kZWxjb250ZXh0cHJvdG9jb2wvbW9kZWxjb250ZXh0cHJvdG9jb2wvYmxvYi80NzMzOWMwM2MxNDNiYjRlYzAxYTI2ZTcyMWExYjhmZTY2NjM0ZWJlL2RvY3Mvc3BlY2lmaWNhdGlvbi9kcmFmdC9iYXNpYy9pbmRleC5tZHgjZ2VuZXJhbC1maWVsZHMpXG4gICAgICogZm9yIG5vdGVzIG9uIF9tZXRhIHVzYWdlLlxuICAgICAqL1xuICAgIF9tZXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKVxufSk7XG5leHBvcnQgY29uc3QgVGV4dFJlc291cmNlQ29udGVudHNTY2hlbWEgPSBSZXNvdXJjZUNvbnRlbnRzU2NoZW1hLmV4dGVuZCh7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgb2YgdGhlIGl0ZW0uIFRoaXMgbXVzdCBvbmx5IGJlIHNldCBpZiB0aGUgaXRlbSBjYW4gYWN0dWFsbHkgYmUgcmVwcmVzZW50ZWQgYXMgdGV4dCAobm90IGJpbmFyeSBkYXRhKS5cbiAgICAgKi9cbiAgICB0ZXh0OiB6LnN0cmluZygpXG59KTtcbi8qKlxuICogQSBab2Qgc2NoZW1hIGZvciB2YWxpZGF0aW5nIEJhc2U2NCBzdHJpbmdzIHRoYXQgaXMgbW9yZSBwZXJmb3JtYW50IGFuZFxuICogcm9idXN0IGZvciB2ZXJ5IGxhcmdlIGlucHV0cyB0aGFuIHRoZSBkZWZhdWx0IHJlZ2V4LWJhc2VkIGNoZWNrLiBJdCBhdm9pZHNcbiAqIHN0YWNrIG92ZXJmbG93cyBieSB1c2luZyB0aGUgbmF0aXZlIGBhdG9iYCBmdW5jdGlvbiBmb3IgdmFsaWRhdGlvbi5cbiAqL1xuY29uc3QgQmFzZTY0U2NoZW1hID0gei5zdHJpbmcoKS5yZWZpbmUodmFsID0+IHtcbiAgICB0cnkge1xuICAgICAgICAvLyBhdG9iIHRocm93cyBhIERPTUV4Y2VwdGlvbiBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGNoYXJhY3RlcnNcbiAgICAgICAgLy8gdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIEJhc2U2NCBjaGFyYWN0ZXIgc2V0LlxuICAgICAgICBhdG9iKHZhbCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59LCB7IG1lc3NhZ2U6ICdJbnZhbGlkIEJhc2U2NCBzdHJpbmcnIH0pO1xuZXhwb3J0IGNvbnN0IEJsb2JSZXNvdXJjZUNvbnRlbnRzU2NoZW1hID0gUmVzb3VyY2VDb250ZW50c1NjaGVtYS5leHRlbmQoe1xuICAgIC8qKlxuICAgICAqIEEgYmFzZTY0LWVuY29kZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYmluYXJ5IGRhdGEgb2YgdGhlIGl0ZW0uXG4gICAgICovXG4gICAgYmxvYjogQmFzZTY0U2NoZW1hXG59KTtcbi8qKlxuICogVGhlIHNlbmRlciBvciByZWNpcGllbnQgb2YgbWVzc2FnZXMgYW5kIGRhdGEgaW4gYSBjb252ZXJzYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBSb2xlU2NoZW1hID0gei5lbnVtKFsndXNlcicsICdhc3Npc3RhbnQnXSk7XG4vKipcbiAqIE9wdGlvbmFsIGFubm90YXRpb25zIHByb3ZpZGluZyBjbGllbnRzIGFkZGl0aW9uYWwgY29udGV4dCBhYm91dCBhIHJlc291cmNlLlxuICovXG5leHBvcnQgY29uc3QgQW5ub3RhdGlvbnNTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gICAgICogSW50ZW5kZWQgYXVkaWVuY2UocykgZm9yIHRoZSByZXNvdXJjZS5cbiAgICAgKi9cbiAgICBhdWRpZW5jZTogei5hcnJheShSb2xlU2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIEltcG9ydGFuY2UgaGludCBmb3IgdGhlIHJlc291cmNlLCBmcm9tIDAgKGxlYXN0KSB0byAxIChtb3N0KS5cbiAgICAgKi9cbiAgICBwcmlvcml0eTogei5udW1iZXIoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksXG4gICAgLyoqXG4gICAgICogSVNPIDg2MDEgdGltZXN0YW1wIGZvciB0aGUgbW9zdCByZWNlbnQgbW9kaWZpY2F0aW9uLlxuICAgICAqL1xuICAgIGxhc3RNb2RpZmllZDogei5pc28uZGF0ZXRpbWUoeyBvZmZzZXQ6IHRydWUgfSkub3B0aW9uYWwoKVxufSk7XG4vKipcbiAqIEEga25vd24gcmVzb3VyY2UgdGhhdCB0aGUgc2VydmVyIGlzIGNhcGFibGUgb2YgcmVhZGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlc291cmNlU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC4uLkJhc2VNZXRhZGF0YVNjaGVtYS5zaGFwZSxcbiAgICAuLi5JY29uc1NjaGVtYS5zaGFwZSxcbiAgICAvKipcbiAgICAgKiBUaGUgVVJJIG9mIHRoaXMgcmVzb3VyY2UuXG4gICAgICovXG4gICAgdXJpOiB6LnN0cmluZygpLFxuICAgIC8qKlxuICAgICAqIEEgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGJ5IGNsaWVudHMgdG8gaW1wcm92ZSB0aGUgTExNJ3MgdW5kZXJzdGFuZGluZyBvZiBhdmFpbGFibGUgcmVzb3VyY2VzLiBJdCBjYW4gYmUgdGhvdWdodCBvZiBsaWtlIGEgXCJoaW50XCIgdG8gdGhlIG1vZGVsLlxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uOiB6Lm9wdGlvbmFsKHouc3RyaW5nKCkpLFxuICAgIC8qKlxuICAgICAqIFRoZSBNSU1FIHR5cGUgb2YgdGhpcyByZXNvdXJjZSwgaWYga25vd24uXG4gICAgICovXG4gICAgbWltZVR5cGU6IHoub3B0aW9uYWwoei5zdHJpbmcoKSksXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIHJhdyByZXNvdXJjZSBjb250ZW50LCBpbiBieXRlcyAoaS5lLiwgYmVmb3JlIGJhc2U2NCBlbmNvZGluZyBvciBhbnkgdG9rZW5pemF0aW9uKSwgaWYga25vd24uXG4gICAgICpcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGJ5IEhvc3RzIHRvIGRpc3BsYXkgZmlsZSBzaXplcyBhbmQgZXN0aW1hdGUgY29udGV4dCB3aW5kb3cgdXNhZ2UuXG4gICAgICovXG4gICAgc2l6ZTogei5vcHRpb25hbCh6Lm51bWJlcigpKSxcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBhbm5vdGF0aW9ucyBmb3IgdGhlIGNsaWVudC5cbiAgICAgKi9cbiAgICBhbm5vdGF0aW9uczogQW5ub3RhdGlvbnNTY2hlbWEub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBTZWUgW01DUCBzcGVjaWZpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vbW9kZWxjb250ZXh0cHJvdG9jb2wvbW9kZWxjb250ZXh0cHJvdG9jb2wvYmxvYi80NzMzOWMwM2MxNDNiYjRlYzAxYTI2ZTcyMWExYjhmZTY2NjM0ZWJlL2RvY3Mvc3BlY2lmaWNhdGlvbi9kcmFmdC9iYXNpYy9pbmRleC5tZHgjZ2VuZXJhbC1maWVsZHMpXG4gICAgICogZm9yIG5vdGVzIG9uIF9tZXRhIHVzYWdlLlxuICAgICAqL1xuICAgIF9tZXRhOiB6Lm9wdGlvbmFsKHoubG9vc2VPYmplY3Qoe30pKVxufSk7XG4vKipcbiAqIEEgdGVtcGxhdGUgZGVzY3JpcHRpb24gZm9yIHJlc291cmNlcyBhdmFpbGFibGUgb24gdGhlIHNlcnZlci5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlc291cmNlVGVtcGxhdGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLi4uQmFzZU1ldGFkYXRhU2NoZW1hLnNoYXBlLFxuICAgIC4uLkljb25zU2NoZW1hLnNoYXBlLFxuICAgIC8qKlxuICAgICAqIEEgVVJJIHRlbXBsYXRlIChhY2NvcmRpbmcgdG8gUkZDIDY1NzApIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IHJlc291cmNlIFVSSXMuXG4gICAgICovXG4gICAgdXJpVGVtcGxhdGU6IHouc3RyaW5nKCksXG4gICAgLyoqXG4gICAgICogQSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoaXMgdGVtcGxhdGUgaXMgZm9yLlxuICAgICAqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCBieSBjbGllbnRzIHRvIGltcHJvdmUgdGhlIExMTSdzIHVuZGVyc3RhbmRpbmcgb2YgYXZhaWxhYmxlIHJlc291cmNlcy4gSXQgY2FuIGJlIHRob3VnaHQgb2YgbGlrZSBhIFwiaGludFwiIHRvIHRoZSBtb2RlbC5cbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbjogei5vcHRpb25hbCh6LnN0cmluZygpKSxcbiAgICAvKipcbiAgICAgKiBUaGUgTUlNRSB0eXBlIGZvciBhbGwgcmVzb3VyY2VzIHRoYXQgbWF0Y2ggdGhpcyB0ZW1wbGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBpZiBhbGwgcmVzb3VyY2VzIG1hdGNoaW5nIHRoaXMgdGVtcGxhdGUgaGF2ZSB0aGUgc2FtZSB0eXBlLlxuICAgICAqL1xuICAgIG1pbWVUeXBlOiB6Lm9wdGlvbmFsKHouc3RyaW5nKCkpLFxuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIGFubm90YXRpb25zIGZvciB0aGUgY2xpZW50LlxuICAgICAqL1xuICAgIGFubm90YXRpb25zOiBBbm5vdGF0aW9uc1NjaGVtYS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIFNlZSBbTUNQIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9tb2RlbGNvbnRleHRwcm90b2NvbC9tb2RlbGNvbnRleHRwcm90b2NvbC9ibG9iLzQ3MzM5YzAzYzE0M2JiNGVjMDFhMjZlNzIxYTFiOGZlNjY2MzRlYmUvZG9jcy9zcGVjaWZpY2F0aW9uL2RyYWZ0L2Jhc2ljL2luZGV4Lm1keCNnZW5lcmFsLWZpZWxkcylcbiAgICAgKiBmb3Igbm90ZXMgb24gX21ldGEgdXNhZ2UuXG4gICAgICovXG4gICAgX21ldGE6IHoub3B0aW9uYWwoei5sb29zZU9iamVjdCh7fSkpXG59KTtcbi8qKlxuICogU2VudCBmcm9tIHRoZSBjbGllbnQgdG8gcmVxdWVzdCBhIGxpc3Qgb2YgcmVzb3VyY2VzIHRoZSBzZXJ2ZXIgaGFzLlxuICovXG5leHBvcnQgY29uc3QgTGlzdFJlc291cmNlc1JlcXVlc3RTY2hlbWEgPSBQYWdpbmF0ZWRSZXF1ZXN0U2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoJ3Jlc291cmNlcy9saXN0Jylcbn0pO1xuLyoqXG4gKiBUaGUgc2VydmVyJ3MgcmVzcG9uc2UgdG8gYSByZXNvdXJjZXMvbGlzdCByZXF1ZXN0IGZyb20gdGhlIGNsaWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IExpc3RSZXNvdXJjZXNSZXN1bHRTY2hlbWEgPSBQYWdpbmF0ZWRSZXN1bHRTY2hlbWEuZXh0ZW5kKHtcbiAgICByZXNvdXJjZXM6IHouYXJyYXkoUmVzb3VyY2VTY2hlbWEpXG59KTtcbi8qKlxuICogU2VudCBmcm9tIHRoZSBjbGllbnQgdG8gcmVxdWVzdCBhIGxpc3Qgb2YgcmVzb3VyY2UgdGVtcGxhdGVzIHRoZSBzZXJ2ZXIgaGFzLlxuICovXG5leHBvcnQgY29uc3QgTGlzdFJlc291cmNlVGVtcGxhdGVzUmVxdWVzdFNjaGVtYSA9IFBhZ2luYXRlZFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbCgncmVzb3VyY2VzL3RlbXBsYXRlcy9saXN0Jylcbn0pO1xuLyoqXG4gKiBUaGUgc2VydmVyJ3MgcmVzcG9uc2UgdG8gYSByZXNvdXJjZXMvdGVtcGxhdGVzL2xpc3QgcmVxdWVzdCBmcm9tIHRoZSBjbGllbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBMaXN0UmVzb3VyY2VUZW1wbGF0ZXNSZXN1bHRTY2hlbWEgPSBQYWdpbmF0ZWRSZXN1bHRTY2hlbWEuZXh0ZW5kKHtcbiAgICByZXNvdXJjZVRlbXBsYXRlczogei5hcnJheShSZXNvdXJjZVRlbXBsYXRlU2NoZW1hKVxufSk7XG5leHBvcnQgY29uc3QgUmVzb3VyY2VSZXF1ZXN0UGFyYW1zU2NoZW1hID0gQmFzZVJlcXVlc3RQYXJhbXNTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBUaGUgVVJJIG9mIHRoZSByZXNvdXJjZSB0byByZWFkLiBUaGUgVVJJIGNhbiB1c2UgYW55IHByb3RvY29sOyBpdCBpcyB1cCB0byB0aGUgc2VydmVyIGhvdyB0byBpbnRlcnByZXQgaXQuXG4gICAgICpcbiAgICAgKiBAZm9ybWF0IHVyaVxuICAgICAqL1xuICAgIHVyaTogei5zdHJpbmcoKVxufSk7XG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIGEgYHJlc291cmNlcy9yZWFkYCByZXF1ZXN0LlxuICovXG5leHBvcnQgY29uc3QgUmVhZFJlc291cmNlUmVxdWVzdFBhcmFtc1NjaGVtYSA9IFJlc291cmNlUmVxdWVzdFBhcmFtc1NjaGVtYTtcbi8qKlxuICogU2VudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlciwgdG8gcmVhZCBhIHNwZWNpZmljIHJlc291cmNlIFVSSS5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlYWRSZXNvdXJjZVJlcXVlc3RTY2hlbWEgPSBSZXF1ZXN0U2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoJ3Jlc291cmNlcy9yZWFkJyksXG4gICAgcGFyYW1zOiBSZWFkUmVzb3VyY2VSZXF1ZXN0UGFyYW1zU2NoZW1hXG59KTtcbi8qKlxuICogVGhlIHNlcnZlcidzIHJlc3BvbnNlIHRvIGEgcmVzb3VyY2VzL3JlYWQgcmVxdWVzdCBmcm9tIHRoZSBjbGllbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBSZWFkUmVzb3VyY2VSZXN1bHRTY2hlbWEgPSBSZXN1bHRTY2hlbWEuZXh0ZW5kKHtcbiAgICBjb250ZW50czogei5hcnJheSh6LnVuaW9uKFtUZXh0UmVzb3VyY2VDb250ZW50c1NjaGVtYSwgQmxvYlJlc291cmNlQ29udGVudHNTY2hlbWFdKSlcbn0pO1xuLyoqXG4gKiBBbiBvcHRpb25hbCBub3RpZmljYXRpb24gZnJvbSB0aGUgc2VydmVyIHRvIHRoZSBjbGllbnQsIGluZm9ybWluZyBpdCB0aGF0IHRoZSBsaXN0IG9mIHJlc291cmNlcyBpdCBjYW4gcmVhZCBmcm9tIGhhcyBjaGFuZ2VkLiBUaGlzIG1heSBiZSBpc3N1ZWQgYnkgc2VydmVycyB3aXRob3V0IGFueSBwcmV2aW91cyBzdWJzY3JpcHRpb24gZnJvbSB0aGUgY2xpZW50LlxuICovXG5leHBvcnQgY29uc3QgUmVzb3VyY2VMaXN0Q2hhbmdlZE5vdGlmaWNhdGlvblNjaGVtYSA9IE5vdGlmaWNhdGlvblNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKCdub3RpZmljYXRpb25zL3Jlc291cmNlcy9saXN0X2NoYW5nZWQnKSxcbiAgICBwYXJhbXM6IE5vdGlmaWNhdGlvbnNQYXJhbXNTY2hlbWEub3B0aW9uYWwoKVxufSk7XG5leHBvcnQgY29uc3QgU3Vic2NyaWJlUmVxdWVzdFBhcmFtc1NjaGVtYSA9IFJlc291cmNlUmVxdWVzdFBhcmFtc1NjaGVtYTtcbi8qKlxuICogU2VudCBmcm9tIHRoZSBjbGllbnQgdG8gcmVxdWVzdCByZXNvdXJjZXMvdXBkYXRlZCBub3RpZmljYXRpb25zIGZyb20gdGhlIHNlcnZlciB3aGVuZXZlciBhIHBhcnRpY3VsYXIgcmVzb3VyY2UgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFN1YnNjcmliZVJlcXVlc3RTY2hlbWEgPSBSZXF1ZXN0U2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoJ3Jlc291cmNlcy9zdWJzY3JpYmUnKSxcbiAgICBwYXJhbXM6IFN1YnNjcmliZVJlcXVlc3RQYXJhbXNTY2hlbWFcbn0pO1xuZXhwb3J0IGNvbnN0IFVuc3Vic2NyaWJlUmVxdWVzdFBhcmFtc1NjaGVtYSA9IFJlc291cmNlUmVxdWVzdFBhcmFtc1NjaGVtYTtcbi8qKlxuICogU2VudCBmcm9tIHRoZSBjbGllbnQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgcmVzb3VyY2VzL3VwZGF0ZWQgbm90aWZpY2F0aW9ucyBmcm9tIHRoZSBzZXJ2ZXIuIFRoaXMgc2hvdWxkIGZvbGxvdyBhIHByZXZpb3VzIHJlc291cmNlcy9zdWJzY3JpYmUgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFVuc3Vic2NyaWJlUmVxdWVzdFNjaGVtYSA9IFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbCgncmVzb3VyY2VzL3Vuc3Vic2NyaWJlJyksXG4gICAgcGFyYW1zOiBVbnN1YnNjcmliZVJlcXVlc3RQYXJhbXNTY2hlbWFcbn0pO1xuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBhIGBub3RpZmljYXRpb25zL3Jlc291cmNlcy91cGRhdGVkYCBub3RpZmljYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVVwZGF0ZWROb3RpZmljYXRpb25QYXJhbXNTY2hlbWEgPSBOb3RpZmljYXRpb25zUGFyYW1zU2NoZW1hLmV4dGVuZCh7XG4gICAgLyoqXG4gICAgICogVGhlIFVSSSBvZiB0aGUgcmVzb3VyY2UgdGhhdCBoYXMgYmVlbiB1cGRhdGVkLiBUaGlzIG1pZ2h0IGJlIGEgc3ViLXJlc291cmNlIG9mIHRoZSBvbmUgdGhhdCB0aGUgY2xpZW50IGFjdHVhbGx5IHN1YnNjcmliZWQgdG8uXG4gICAgICovXG4gICAgdXJpOiB6LnN0cmluZygpXG59KTtcbi8qKlxuICogQSBub3RpZmljYXRpb24gZnJvbSB0aGUgc2VydmVyIHRvIHRoZSBjbGllbnQsIGluZm9ybWluZyBpdCB0aGF0IGEgcmVzb3VyY2UgaGFzIGNoYW5nZWQgYW5kIG1heSBuZWVkIHRvIGJlIHJlYWQgYWdhaW4uIFRoaXMgc2hvdWxkIG9ubHkgYmUgc2VudCBpZiB0aGUgY2xpZW50IHByZXZpb3VzbHkgc2VudCBhIHJlc291cmNlcy9zdWJzY3JpYmUgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlc291cmNlVXBkYXRlZE5vdGlmaWNhdGlvblNjaGVtYSA9IE5vdGlmaWNhdGlvblNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKCdub3RpZmljYXRpb25zL3Jlc291cmNlcy91cGRhdGVkJyksXG4gICAgcGFyYW1zOiBSZXNvdXJjZVVwZGF0ZWROb3RpZmljYXRpb25QYXJhbXNTY2hlbWFcbn0pO1xuLyogUHJvbXB0cyAqL1xuLyoqXG4gKiBEZXNjcmliZXMgYW4gYXJndW1lbnQgdGhhdCBhIHByb21wdCBjYW4gYWNjZXB0LlxuICovXG5leHBvcnQgY29uc3QgUHJvbXB0QXJndW1lbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGFyZ3VtZW50LlxuICAgICAqL1xuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgLyoqXG4gICAgICogQSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgYXJndW1lbnQuXG4gICAgICovXG4gICAgZGVzY3JpcHRpb246IHoub3B0aW9uYWwoei5zdHJpbmcoKSksXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGFyZ3VtZW50IG11c3QgYmUgcHJvdmlkZWQuXG4gICAgICovXG4gICAgcmVxdWlyZWQ6IHoub3B0aW9uYWwoei5ib29sZWFuKCkpXG59KTtcbi8qKlxuICogQSBwcm9tcHQgb3IgcHJvbXB0IHRlbXBsYXRlIHRoYXQgdGhlIHNlcnZlciBvZmZlcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBQcm9tcHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLi4uQmFzZU1ldGFkYXRhU2NoZW1hLnNoYXBlLFxuICAgIC4uLkljb25zU2NoZW1hLnNoYXBlLFxuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBwcm9tcHQgcHJvdmlkZXNcbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbjogei5vcHRpb25hbCh6LnN0cmluZygpKSxcbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgYXJndW1lbnRzIHRvIHVzZSBmb3IgdGVtcGxhdGluZyB0aGUgcHJvbXB0LlxuICAgICAqL1xuICAgIGFyZ3VtZW50czogei5vcHRpb25hbCh6LmFycmF5KFByb21wdEFyZ3VtZW50U2NoZW1hKSksXG4gICAgLyoqXG4gICAgICogU2VlIFtNQ1Agc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL21vZGVsY29udGV4dHByb3RvY29sL21vZGVsY29udGV4dHByb3RvY29sL2Jsb2IvNDczMzljMDNjMTQzYmI0ZWMwMWEyNmU3MjFhMWI4ZmU2NjYzNGViZS9kb2NzL3NwZWNpZmljYXRpb24vZHJhZnQvYmFzaWMvaW5kZXgubWR4I2dlbmVyYWwtZmllbGRzKVxuICAgICAqIGZvciBub3RlcyBvbiBfbWV0YSB1c2FnZS5cbiAgICAgKi9cbiAgICBfbWV0YTogei5vcHRpb25hbCh6Lmxvb3NlT2JqZWN0KHt9KSlcbn0pO1xuLyoqXG4gKiBTZW50IGZyb20gdGhlIGNsaWVudCB0byByZXF1ZXN0IGEgbGlzdCBvZiBwcm9tcHRzIGFuZCBwcm9tcHQgdGVtcGxhdGVzIHRoZSBzZXJ2ZXIgaGFzLlxuICovXG5leHBvcnQgY29uc3QgTGlzdFByb21wdHNSZXF1ZXN0U2NoZW1hID0gUGFnaW5hdGVkUmVxdWVzdFNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKCdwcm9tcHRzL2xpc3QnKVxufSk7XG4vKipcbiAqIFRoZSBzZXJ2ZXIncyByZXNwb25zZSB0byBhIHByb21wdHMvbGlzdCByZXF1ZXN0IGZyb20gdGhlIGNsaWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IExpc3RQcm9tcHRzUmVzdWx0U2NoZW1hID0gUGFnaW5hdGVkUmVzdWx0U2NoZW1hLmV4dGVuZCh7XG4gICAgcHJvbXB0czogei5hcnJheShQcm9tcHRTY2hlbWEpXG59KTtcbi8qKlxuICogUGFyYW1ldGVycyBmb3IgYSBgcHJvbXB0cy9nZXRgIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBHZXRQcm9tcHRSZXF1ZXN0UGFyYW1zU2NoZW1hID0gQmFzZVJlcXVlc3RQYXJhbXNTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0IG9yIHByb21wdCB0ZW1wbGF0ZS5cbiAgICAgKi9cbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIC8qKlxuICAgICAqIEFyZ3VtZW50cyB0byB1c2UgZm9yIHRlbXBsYXRpbmcgdGhlIHByb21wdC5cbiAgICAgKi9cbiAgICBhcmd1bWVudHM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuLyoqXG4gKiBVc2VkIGJ5IHRoZSBjbGllbnQgdG8gZ2V0IGEgcHJvbXB0IHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBHZXRQcm9tcHRSZXF1ZXN0U2NoZW1hID0gUmVxdWVzdFNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKCdwcm9tcHRzL2dldCcpLFxuICAgIHBhcmFtczogR2V0UHJvbXB0UmVxdWVzdFBhcmFtc1NjaGVtYVxufSk7XG4vKipcbiAqIFRleHQgcHJvdmlkZWQgdG8gb3IgZnJvbSBhbiBMTE0uXG4gKi9cbmV4cG9ydCBjb25zdCBUZXh0Q29udGVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoJ3RleHQnKSxcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBjb250ZW50IG9mIHRoZSBtZXNzYWdlLlxuICAgICAqL1xuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwgYW5ub3RhdGlvbnMgZm9yIHRoZSBjbGllbnQuXG4gICAgICovXG4gICAgYW5ub3RhdGlvbnM6IEFubm90YXRpb25zU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgLyoqXG4gICAgICogU2VlIFtNQ1Agc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL21vZGVsY29udGV4dHByb3RvY29sL21vZGVsY29udGV4dHByb3RvY29sL2Jsb2IvNDczMzljMDNjMTQzYmI0ZWMwMWEyNmU3MjFhMWI4ZmU2NjYzNGViZS9kb2NzL3NwZWNpZmljYXRpb24vZHJhZnQvYmFzaWMvaW5kZXgubWR4I2dlbmVyYWwtZmllbGRzKVxuICAgICAqIGZvciBub3RlcyBvbiBfbWV0YSB1c2FnZS5cbiAgICAgKi9cbiAgICBfbWV0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKClcbn0pO1xuLyoqXG4gKiBBbiBpbWFnZSBwcm92aWRlZCB0byBvciBmcm9tIGFuIExMTS5cbiAqL1xuZXhwb3J0IGNvbnN0IEltYWdlQ29udGVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoJ2ltYWdlJyksXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2U2NC1lbmNvZGVkIGltYWdlIGRhdGEuXG4gICAgICovXG4gICAgZGF0YTogQmFzZTY0U2NoZW1hLFxuICAgIC8qKlxuICAgICAqIFRoZSBNSU1FIHR5cGUgb2YgdGhlIGltYWdlLiBEaWZmZXJlbnQgcHJvdmlkZXJzIG1heSBzdXBwb3J0IGRpZmZlcmVudCBpbWFnZSB0eXBlcy5cbiAgICAgKi9cbiAgICBtaW1lVHlwZTogei5zdHJpbmcoKSxcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBhbm5vdGF0aW9ucyBmb3IgdGhlIGNsaWVudC5cbiAgICAgKi9cbiAgICBhbm5vdGF0aW9uczogQW5ub3RhdGlvbnNTY2hlbWEub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBTZWUgW01DUCBzcGVjaWZpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vbW9kZWxjb250ZXh0cHJvdG9jb2wvbW9kZWxjb250ZXh0cHJvdG9jb2wvYmxvYi80NzMzOWMwM2MxNDNiYjRlYzAxYTI2ZTcyMWExYjhmZTY2NjM0ZWJlL2RvY3Mvc3BlY2lmaWNhdGlvbi9kcmFmdC9iYXNpYy9pbmRleC5tZHgjZ2VuZXJhbC1maWVsZHMpXG4gICAgICogZm9yIG5vdGVzIG9uIF9tZXRhIHVzYWdlLlxuICAgICAqL1xuICAgIF9tZXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKVxufSk7XG4vKipcbiAqIEFuIEF1ZGlvIHByb3ZpZGVkIHRvIG9yIGZyb20gYW4gTExNLlxuICovXG5leHBvcnQgY29uc3QgQXVkaW9Db250ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbCgnYXVkaW8nKSxcbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZTY0LWVuY29kZWQgYXVkaW8gZGF0YS5cbiAgICAgKi9cbiAgICBkYXRhOiBCYXNlNjRTY2hlbWEsXG4gICAgLyoqXG4gICAgICogVGhlIE1JTUUgdHlwZSBvZiB0aGUgYXVkaW8uIERpZmZlcmVudCBwcm92aWRlcnMgbWF5IHN1cHBvcnQgZGlmZmVyZW50IGF1ZGlvIHR5cGVzLlxuICAgICAqL1xuICAgIG1pbWVUeXBlOiB6LnN0cmluZygpLFxuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIGFubm90YXRpb25zIGZvciB0aGUgY2xpZW50LlxuICAgICAqL1xuICAgIGFubm90YXRpb25zOiBBbm5vdGF0aW9uc1NjaGVtYS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIFNlZSBbTUNQIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9tb2RlbGNvbnRleHRwcm90b2NvbC9tb2RlbGNvbnRleHRwcm90b2NvbC9ibG9iLzQ3MzM5YzAzYzE0M2JiNGVjMDFhMjZlNzIxYTFiOGZlNjY2MzRlYmUvZG9jcy9zcGVjaWZpY2F0aW9uL2RyYWZ0L2Jhc2ljL2luZGV4Lm1keCNnZW5lcmFsLWZpZWxkcylcbiAgICAgKiBmb3Igbm90ZXMgb24gX21ldGEgdXNhZ2UuXG4gICAgICovXG4gICAgX21ldGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogQSB0b29sIGNhbGwgcmVxdWVzdCBmcm9tIGFuIGFzc2lzdGFudCAoTExNKS5cbiAqIFJlcHJlc2VudHMgdGhlIGFzc2lzdGFudCdzIHJlcXVlc3QgdG8gdXNlIGEgdG9vbC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRvb2xVc2VDb250ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbCgndG9vbF91c2UnKSxcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgdG9vbCB0byBpbnZva2UuXG4gICAgICogTXVzdCBtYXRjaCBhIHRvb2wgbmFtZSBmcm9tIHRoZSByZXF1ZXN0J3MgdG9vbHMgYXJyYXkuXG4gICAgICovXG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAvKipcbiAgICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyB0b29sIGNhbGwuXG4gICAgICogVXNlZCB0byBjb3JyZWxhdGUgd2l0aCBUb29sUmVzdWx0Q29udGVudCBpbiBzdWJzZXF1ZW50IG1lc3NhZ2VzLlxuICAgICAqL1xuICAgIGlkOiB6LnN0cmluZygpLFxuICAgIC8qKlxuICAgICAqIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSB0b29sLlxuICAgICAqIE11c3QgY29uZm9ybSB0byB0aGUgdG9vbCdzIGlucHV0U2NoZW1hLlxuICAgICAqL1xuICAgIGlucHV0OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSksXG4gICAgLyoqXG4gICAgICogU2VlIFtNQ1Agc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL21vZGVsY29udGV4dHByb3RvY29sL21vZGVsY29udGV4dHByb3RvY29sL2Jsb2IvNDczMzljMDNjMTQzYmI0ZWMwMWEyNmU3MjFhMWI4ZmU2NjYzNGViZS9kb2NzL3NwZWNpZmljYXRpb24vZHJhZnQvYmFzaWMvaW5kZXgubWR4I2dlbmVyYWwtZmllbGRzKVxuICAgICAqIGZvciBub3RlcyBvbiBfbWV0YSB1c2FnZS5cbiAgICAgKi9cbiAgICBfbWV0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKClcbn0pO1xuLyoqXG4gKiBUaGUgY29udGVudHMgb2YgYSByZXNvdXJjZSwgZW1iZWRkZWQgaW50byBhIHByb21wdCBvciB0b29sIGNhbGwgcmVzdWx0LlxuICovXG5leHBvcnQgY29uc3QgRW1iZWRkZWRSZXNvdXJjZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoJ3Jlc291cmNlJyksXG4gICAgcmVzb3VyY2U6IHoudW5pb24oW1RleHRSZXNvdXJjZUNvbnRlbnRzU2NoZW1hLCBCbG9iUmVzb3VyY2VDb250ZW50c1NjaGVtYV0pLFxuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIGFubm90YXRpb25zIGZvciB0aGUgY2xpZW50LlxuICAgICAqL1xuICAgIGFubm90YXRpb25zOiBBbm5vdGF0aW9uc1NjaGVtYS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIFNlZSBbTUNQIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9tb2RlbGNvbnRleHRwcm90b2NvbC9tb2RlbGNvbnRleHRwcm90b2NvbC9ibG9iLzQ3MzM5YzAzYzE0M2JiNGVjMDFhMjZlNzIxYTFiOGZlNjY2MzRlYmUvZG9jcy9zcGVjaWZpY2F0aW9uL2RyYWZ0L2Jhc2ljL2luZGV4Lm1keCNnZW5lcmFsLWZpZWxkcylcbiAgICAgKiBmb3Igbm90ZXMgb24gX21ldGEgdXNhZ2UuXG4gICAgICovXG4gICAgX21ldGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogQSByZXNvdXJjZSB0aGF0IHRoZSBzZXJ2ZXIgaXMgY2FwYWJsZSBvZiByZWFkaW5nLCBpbmNsdWRlZCBpbiBhIHByb21wdCBvciB0b29sIGNhbGwgcmVzdWx0LlxuICpcbiAqIE5vdGU6IHJlc291cmNlIGxpbmtzIHJldHVybmVkIGJ5IHRvb2xzIGFyZSBub3QgZ3VhcmFudGVlZCB0byBhcHBlYXIgaW4gdGhlIHJlc3VsdHMgb2YgYHJlc291cmNlcy9saXN0YCByZXF1ZXN0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlc291cmNlTGlua1NjaGVtYSA9IFJlc291cmNlU2NoZW1hLmV4dGVuZCh7XG4gICAgdHlwZTogei5saXRlcmFsKCdyZXNvdXJjZV9saW5rJylcbn0pO1xuLyoqXG4gKiBBIGNvbnRlbnQgYmxvY2sgdGhhdCBjYW4gYmUgdXNlZCBpbiBwcm9tcHRzIGFuZCB0b29sIHJlc3VsdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBDb250ZW50QmxvY2tTY2hlbWEgPSB6LnVuaW9uKFtcbiAgICBUZXh0Q29udGVudFNjaGVtYSxcbiAgICBJbWFnZUNvbnRlbnRTY2hlbWEsXG4gICAgQXVkaW9Db250ZW50U2NoZW1hLFxuICAgIFJlc291cmNlTGlua1NjaGVtYSxcbiAgICBFbWJlZGRlZFJlc291cmNlU2NoZW1hXG5dKTtcbi8qKlxuICogRGVzY3JpYmVzIGEgbWVzc2FnZSByZXR1cm5lZCBhcyBwYXJ0IG9mIGEgcHJvbXB0LlxuICovXG5leHBvcnQgY29uc3QgUHJvbXB0TWVzc2FnZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICByb2xlOiBSb2xlU2NoZW1hLFxuICAgIGNvbnRlbnQ6IENvbnRlbnRCbG9ja1NjaGVtYVxufSk7XG4vKipcbiAqIFRoZSBzZXJ2ZXIncyByZXNwb25zZSB0byBhIHByb21wdHMvZ2V0IHJlcXVlc3QgZnJvbSB0aGUgY2xpZW50LlxuICovXG5leHBvcnQgY29uc3QgR2V0UHJvbXB0UmVzdWx0U2NoZW1hID0gUmVzdWx0U2NoZW1hLmV4dGVuZCh7XG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBwcm9tcHQuXG4gICAgICovXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBtZXNzYWdlczogei5hcnJheShQcm9tcHRNZXNzYWdlU2NoZW1hKVxufSk7XG4vKipcbiAqIEFuIG9wdGlvbmFsIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudCwgaW5mb3JtaW5nIGl0IHRoYXQgdGhlIGxpc3Qgb2YgcHJvbXB0cyBpdCBvZmZlcnMgaGFzIGNoYW5nZWQuIFRoaXMgbWF5IGJlIGlzc3VlZCBieSBzZXJ2ZXJzIHdpdGhvdXQgYW55IHByZXZpb3VzIHN1YnNjcmlwdGlvbiBmcm9tIHRoZSBjbGllbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBQcm9tcHRMaXN0Q2hhbmdlZE5vdGlmaWNhdGlvblNjaGVtYSA9IE5vdGlmaWNhdGlvblNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKCdub3RpZmljYXRpb25zL3Byb21wdHMvbGlzdF9jaGFuZ2VkJyksXG4gICAgcGFyYW1zOiBOb3RpZmljYXRpb25zUGFyYW1zU2NoZW1hLm9wdGlvbmFsKClcbn0pO1xuLyogVG9vbHMgKi9cbi8qKlxuICogQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGRlc2NyaWJpbmcgYSBUb29sIHRvIGNsaWVudHMuXG4gKlxuICogTk9URTogYWxsIHByb3BlcnRpZXMgaW4gVG9vbEFubm90YXRpb25zIGFyZSAqKmhpbnRzKiouXG4gKiBUaGV5IGFyZSBub3QgZ3VhcmFudGVlZCB0byBwcm92aWRlIGEgZmFpdGhmdWwgZGVzY3JpcHRpb24gb2ZcbiAqIHRvb2wgYmVoYXZpb3IgKGluY2x1ZGluZyBkZXNjcmlwdGl2ZSBwcm9wZXJ0aWVzIGxpa2UgYHRpdGxlYCkuXG4gKlxuICogQ2xpZW50cyBzaG91bGQgbmV2ZXIgbWFrZSB0b29sIHVzZSBkZWNpc2lvbnMgYmFzZWQgb24gVG9vbEFubm90YXRpb25zXG4gKiByZWNlaXZlZCBmcm9tIHVudHJ1c3RlZCBzZXJ2ZXJzLlxuICovXG5leHBvcnQgY29uc3QgVG9vbEFubm90YXRpb25zU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICAgICAqIEEgaHVtYW4tcmVhZGFibGUgdGl0bGUgZm9yIHRoZSB0b29sLlxuICAgICAqL1xuICAgIHRpdGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlIHRvb2wgZG9lcyBub3QgbW9kaWZ5IGl0cyBlbnZpcm9ubWVudC5cbiAgICAgKlxuICAgICAqIERlZmF1bHQ6IGZhbHNlXG4gICAgICovXG4gICAgcmVhZE9ubHlIaW50OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIElmIHRydWUsIHRoZSB0b29sIG1heSBwZXJmb3JtIGRlc3RydWN0aXZlIHVwZGF0ZXMgdG8gaXRzIGVudmlyb25tZW50LlxuICAgICAqIElmIGZhbHNlLCB0aGUgdG9vbCBwZXJmb3JtcyBvbmx5IGFkZGl0aXZlIHVwZGF0ZXMuXG4gICAgICpcbiAgICAgKiAoVGhpcyBwcm9wZXJ0eSBpcyBtZWFuaW5nZnVsIG9ubHkgd2hlbiBgcmVhZE9ubHlIaW50ID09IGZhbHNlYClcbiAgICAgKlxuICAgICAqIERlZmF1bHQ6IHRydWVcbiAgICAgKi9cbiAgICBkZXN0cnVjdGl2ZUhpbnQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgY2FsbGluZyB0aGUgdG9vbCByZXBlYXRlZGx5IHdpdGggdGhlIHNhbWUgYXJndW1lbnRzXG4gICAgICogd2lsbCBoYXZlIG5vIGFkZGl0aW9uYWwgZWZmZWN0IG9uIHRoZSBpdHMgZW52aXJvbm1lbnQuXG4gICAgICpcbiAgICAgKiAoVGhpcyBwcm9wZXJ0eSBpcyBtZWFuaW5nZnVsIG9ubHkgd2hlbiBgcmVhZE9ubHlIaW50ID09IGZhbHNlYClcbiAgICAgKlxuICAgICAqIERlZmF1bHQ6IGZhbHNlXG4gICAgICovXG4gICAgaWRlbXBvdGVudEhpbnQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhpcyB0b29sIG1heSBpbnRlcmFjdCB3aXRoIGFuIFwib3BlbiB3b3JsZFwiIG9mIGV4dGVybmFsXG4gICAgICogZW50aXRpZXMuIElmIGZhbHNlLCB0aGUgdG9vbCdzIGRvbWFpbiBvZiBpbnRlcmFjdGlvbiBpcyBjbG9zZWQuXG4gICAgICogRm9yIGV4YW1wbGUsIHRoZSB3b3JsZCBvZiBhIHdlYiBzZWFyY2ggdG9vbCBpcyBvcGVuLCB3aGVyZWFzIHRoYXRcbiAgICAgKiBvZiBhIG1lbW9yeSB0b29sIGlzIG5vdC5cbiAgICAgKlxuICAgICAqIERlZmF1bHQ6IHRydWVcbiAgICAgKi9cbiAgICBvcGVuV29ybGRIaW50OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogRXhlY3V0aW9uLXJlbGF0ZWQgcHJvcGVydGllcyBmb3IgYSB0b29sLlxuICovXG5leHBvcnQgY29uc3QgVG9vbEV4ZWN1dGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIHRvb2wncyBwcmVmZXJlbmNlIGZvciB0YXNrLWF1Z21lbnRlZCBleGVjdXRpb24uXG4gICAgICogLSBcInJlcXVpcmVkXCI6IENsaWVudHMgTVVTVCBpbnZva2UgdGhlIHRvb2wgYXMgYSB0YXNrXG4gICAgICogLSBcIm9wdGlvbmFsXCI6IENsaWVudHMgTUFZIGludm9rZSB0aGUgdG9vbCBhcyBhIHRhc2sgb3Igbm9ybWFsIHJlcXVlc3RcbiAgICAgKiAtIFwiZm9yYmlkZGVuXCI6IENsaWVudHMgTVVTVCBOT1QgYXR0ZW1wdCB0byBpbnZva2UgdGhlIHRvb2wgYXMgYSB0YXNrXG4gICAgICpcbiAgICAgKiBJZiBub3QgcHJlc2VudCwgZGVmYXVsdHMgdG8gXCJmb3JiaWRkZW5cIi5cbiAgICAgKi9cbiAgICB0YXNrU3VwcG9ydDogei5lbnVtKFsncmVxdWlyZWQnLCAnb3B0aW9uYWwnLCAnZm9yYmlkZGVuJ10pLm9wdGlvbmFsKClcbn0pO1xuLyoqXG4gKiBEZWZpbml0aW9uIGZvciBhIHRvb2wgdGhlIGNsaWVudCBjYW4gY2FsbC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRvb2xTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLi4uQmFzZU1ldGFkYXRhU2NoZW1hLnNoYXBlLFxuICAgIC4uLkljb25zU2NoZW1hLnNoYXBlLFxuICAgIC8qKlxuICAgICAqIEEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIHRvb2wuXG4gICAgICovXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBBIEpTT04gU2NoZW1hIDIwMjAtMTIgb2JqZWN0IGRlZmluaW5nIHRoZSBleHBlY3RlZCBwYXJhbWV0ZXJzIGZvciB0aGUgdG9vbC5cbiAgICAgKiBNdXN0IGhhdmUgdHlwZTogJ29iamVjdCcgYXQgdGhlIHJvb3QgbGV2ZWwgcGVyIE1DUCBzcGVjLlxuICAgICAqL1xuICAgIGlucHV0U2NoZW1hOiB6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICB0eXBlOiB6LmxpdGVyYWwoJ29iamVjdCcpLFxuICAgICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LnN0cmluZygpLCBBc3NlcnRPYmplY3RTY2hlbWEpLm9wdGlvbmFsKCksXG4gICAgICAgIHJlcXVpcmVkOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbiAgICB9KVxuICAgICAgICAuY2F0Y2hhbGwoei51bmtub3duKCkpLFxuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIEpTT04gU2NoZW1hIDIwMjAtMTIgb2JqZWN0IGRlZmluaW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHRvb2wncyBvdXRwdXRcbiAgICAgKiByZXR1cm5lZCBpbiB0aGUgc3RydWN0dXJlZENvbnRlbnQgZmllbGQgb2YgYSBDYWxsVG9vbFJlc3VsdC5cbiAgICAgKiBNdXN0IGhhdmUgdHlwZTogJ29iamVjdCcgYXQgdGhlIHJvb3QgbGV2ZWwgcGVyIE1DUCBzcGVjLlxuICAgICAqL1xuICAgIG91dHB1dFNjaGVtYTogelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgdHlwZTogei5saXRlcmFsKCdvYmplY3QnKSxcbiAgICAgICAgcHJvcGVydGllczogei5yZWNvcmQoei5zdHJpbmcoKSwgQXNzZXJ0T2JqZWN0U2NoZW1hKS5vcHRpb25hbCgpLFxuICAgICAgICByZXF1aXJlZDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgICAgICAgLmNhdGNoYWxsKHoudW5rbm93bigpKVxuICAgICAgICAub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBhZGRpdGlvbmFsIHRvb2wgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgYW5ub3RhdGlvbnM6IFRvb2xBbm5vdGF0aW9uc1NjaGVtYS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGlvbi1yZWxhdGVkIHByb3BlcnRpZXMgZm9yIHRoaXMgdG9vbC5cbiAgICAgKi9cbiAgICBleGVjdXRpb246IFRvb2xFeGVjdXRpb25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBTZWUgW01DUCBzcGVjaWZpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vbW9kZWxjb250ZXh0cHJvdG9jb2wvbW9kZWxjb250ZXh0cHJvdG9jb2wvYmxvYi80NzMzOWMwM2MxNDNiYjRlYzAxYTI2ZTcyMWExYjhmZTY2NjM0ZWJlL2RvY3Mvc3BlY2lmaWNhdGlvbi9kcmFmdC9iYXNpYy9pbmRleC5tZHgjZ2VuZXJhbC1maWVsZHMpXG4gICAgICogZm9yIG5vdGVzIG9uIF9tZXRhIHVzYWdlLlxuICAgICAqL1xuICAgIF9tZXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKVxufSk7XG4vKipcbiAqIFNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHJlcXVlc3QgYSBsaXN0IG9mIHRvb2xzIHRoZSBzZXJ2ZXIgaGFzLlxuICovXG5leHBvcnQgY29uc3QgTGlzdFRvb2xzUmVxdWVzdFNjaGVtYSA9IFBhZ2luYXRlZFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbCgndG9vbHMvbGlzdCcpXG59KTtcbi8qKlxuICogVGhlIHNlcnZlcidzIHJlc3BvbnNlIHRvIGEgdG9vbHMvbGlzdCByZXF1ZXN0IGZyb20gdGhlIGNsaWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IExpc3RUb29sc1Jlc3VsdFNjaGVtYSA9IFBhZ2luYXRlZFJlc3VsdFNjaGVtYS5leHRlbmQoe1xuICAgIHRvb2xzOiB6LmFycmF5KFRvb2xTY2hlbWEpXG59KTtcbi8qKlxuICogVGhlIHNlcnZlcidzIHJlc3BvbnNlIHRvIGEgdG9vbCBjYWxsLlxuICovXG5leHBvcnQgY29uc3QgQ2FsbFRvb2xSZXN1bHRTY2hlbWEgPSBSZXN1bHRTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgY29udGVudCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhlIHRvb2wgY2FsbC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBUb29sIGRvZXMgbm90IGRlZmluZSBhbiBvdXRwdXRTY2hlbWEsIHRoaXMgZmllbGQgTVVTVCBiZSBwcmVzZW50IGluIHRoZSByZXN1bHQuXG4gICAgICogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGlzIGZpZWxkIGlzIGFsd2F5cyBwcmVzZW50LCBidXQgaXQgbWF5IGJlIGVtcHR5LlxuICAgICAqL1xuICAgIGNvbnRlbnQ6IHouYXJyYXkoQ29udGVudEJsb2NrU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBzdHJ1Y3R1cmVkIHRvb2wgb3V0cHV0LlxuICAgICAqXG4gICAgICogSWYgdGhlIFRvb2wgZGVmaW5lcyBhbiBvdXRwdXRTY2hlbWEsIHRoaXMgZmllbGQgTVVTVCBiZSBwcmVzZW50IGluIHRoZSByZXN1bHQsIGFuZCBjb250YWluIGEgSlNPTiBvYmplY3QgdGhhdCBtYXRjaGVzIHRoZSBzY2hlbWEuXG4gICAgICovXG4gICAgc3RydWN0dXJlZENvbnRlbnQ6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRvb2wgY2FsbCBlbmRlZCBpbiBhbiBlcnJvci5cbiAgICAgKlxuICAgICAqIElmIG5vdCBzZXQsIHRoaXMgaXMgYXNzdW1lZCB0byBiZSBmYWxzZSAodGhlIGNhbGwgd2FzIHN1Y2Nlc3NmdWwpLlxuICAgICAqXG4gICAgICogQW55IGVycm9ycyB0aGF0IG9yaWdpbmF0ZSBmcm9tIHRoZSB0b29sIFNIT1VMRCBiZSByZXBvcnRlZCBpbnNpZGUgdGhlIHJlc3VsdFxuICAgICAqIG9iamVjdCwgd2l0aCBgaXNFcnJvcmAgc2V0IHRvIHRydWUsIF9ub3RfIGFzIGFuIE1DUCBwcm90b2NvbC1sZXZlbCBlcnJvclxuICAgICAqIHJlc3BvbnNlLiBPdGhlcndpc2UsIHRoZSBMTE0gd291bGQgbm90IGJlIGFibGUgdG8gc2VlIHRoYXQgYW4gZXJyb3Igb2NjdXJyZWRcbiAgICAgKiBhbmQgc2VsZi1jb3JyZWN0LlxuICAgICAqXG4gICAgICogSG93ZXZlciwgYW55IGVycm9ycyBpbiBfZmluZGluZ18gdGhlIHRvb2wsIGFuIGVycm9yIGluZGljYXRpbmcgdGhhdCB0aGVcbiAgICAgKiBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0b29sIGNhbGxzLCBvciBhbnkgb3RoZXIgZXhjZXB0aW9uYWwgY29uZGl0aW9ucyxcbiAgICAgKiBzaG91bGQgYmUgcmVwb3J0ZWQgYXMgYW4gTUNQIGVycm9yIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGlzRXJyb3I6IHouYm9vbGVhbigpLm9wdGlvbmFsKClcbn0pO1xuLyoqXG4gKiBDYWxsVG9vbFJlc3VsdFNjaGVtYSBleHRlbmRlZCB3aXRoIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHRvIHByb3RvY29sIHZlcnNpb24gMjAyNC0xMC0wNy5cbiAqL1xuZXhwb3J0IGNvbnN0IENvbXBhdGliaWxpdHlDYWxsVG9vbFJlc3VsdFNjaGVtYSA9IENhbGxUb29sUmVzdWx0U2NoZW1hLm9yKFJlc3VsdFNjaGVtYS5leHRlbmQoe1xuICAgIHRvb2xSZXN1bHQ6IHoudW5rbm93bigpXG59KSk7XG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIGEgYHRvb2xzL2NhbGxgIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBDYWxsVG9vbFJlcXVlc3RQYXJhbXNTY2hlbWEgPSBUYXNrQXVnbWVudGVkUmVxdWVzdFBhcmFtc1NjaGVtYS5leHRlbmQoe1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSB0b29sIHRvIGNhbGwuXG4gICAgICovXG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAvKipcbiAgICAgKiBBcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgdG9vbC5cbiAgICAgKi9cbiAgICBhcmd1bWVudHM6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogVXNlZCBieSB0aGUgY2xpZW50IHRvIGludm9rZSBhIHRvb2wgcHJvdmlkZWQgYnkgdGhlIHNlcnZlci5cbiAqL1xuZXhwb3J0IGNvbnN0IENhbGxUb29sUmVxdWVzdFNjaGVtYSA9IFJlcXVlc3RTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbCgndG9vbHMvY2FsbCcpLFxuICAgIHBhcmFtczogQ2FsbFRvb2xSZXF1ZXN0UGFyYW1zU2NoZW1hXG59KTtcbi8qKlxuICogQW4gb3B0aW9uYWwgbm90aWZpY2F0aW9uIGZyb20gdGhlIHNlcnZlciB0byB0aGUgY2xpZW50LCBpbmZvcm1pbmcgaXQgdGhhdCB0aGUgbGlzdCBvZiB0b29scyBpdCBvZmZlcnMgaGFzIGNoYW5nZWQuIFRoaXMgbWF5IGJlIGlzc3VlZCBieSBzZXJ2ZXJzIHdpdGhvdXQgYW55IHByZXZpb3VzIHN1YnNjcmlwdGlvbiBmcm9tIHRoZSBjbGllbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBUb29sTGlzdENoYW5nZWROb3RpZmljYXRpb25TY2hlbWEgPSBOb3RpZmljYXRpb25TY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbCgnbm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQnKSxcbiAgICBwYXJhbXM6IE5vdGlmaWNhdGlvbnNQYXJhbXNTY2hlbWEub3B0aW9uYWwoKVxufSk7XG4vKipcbiAqIEJhc2Ugc2NoZW1hIGZvciBsaXN0IGNoYW5nZWQgc3Vic2NyaXB0aW9uIG9wdGlvbnMgKHdpdGhvdXQgY2FsbGJhY2spLlxuICogVXNlZCBpbnRlcm5hbGx5IGZvciBab2QgdmFsaWRhdGlvbiBvZiBhdXRvUmVmcmVzaCBhbmQgZGVib3VuY2VNcy5cbiAqL1xuZXhwb3J0IGNvbnN0IExpc3RDaGFuZ2VkT3B0aW9uc0Jhc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlIGxpc3Qgd2lsbCBiZSByZWZyZXNoZWQgYXV0b21hdGljYWxseSB3aGVuIGEgbGlzdCBjaGFuZ2VkIG5vdGlmaWNhdGlvbiBpcyByZWNlaXZlZC5cbiAgICAgKiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgdXBkYXRlZCBsaXN0LlxuICAgICAqXG4gICAgICogSWYgZmFsc2UsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aXRoIG51bGwgaXRlbXMsIGFsbG93aW5nIG1hbnVhbCByZWZyZXNoLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGF1dG9SZWZyZXNoOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAgIC8qKlxuICAgICAqIERlYm91bmNlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGZvciBsaXN0IGNoYW5nZWQgbm90aWZpY2F0aW9uIHByb2Nlc3NpbmcuXG4gICAgICpcbiAgICAgKiBNdWx0aXBsZSBub3RpZmljYXRpb25zIHJlY2VpdmVkIHdpdGhpbiB0aGlzIHRpbWVmcmFtZSB3aWxsIG9ubHkgdHJpZ2dlciBvbmUgcmVmcmVzaC5cbiAgICAgKiBTZXQgdG8gMCB0byBkaXNhYmxlIGRlYm91bmNpbmcuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAzMDBcbiAgICAgKi9cbiAgICBkZWJvdW5jZU1zOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCkuZGVmYXVsdCgzMDApXG59KTtcbi8qIExvZ2dpbmcgKi9cbi8qKlxuICogVGhlIHNldmVyaXR5IG9mIGEgbG9nIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBMb2dnaW5nTGV2ZWxTY2hlbWEgPSB6LmVudW0oWydkZWJ1ZycsICdpbmZvJywgJ25vdGljZScsICd3YXJuaW5nJywgJ2Vycm9yJywgJ2NyaXRpY2FsJywgJ2FsZXJ0JywgJ2VtZXJnZW5jeSddKTtcbi8qKlxuICogUGFyYW1ldGVycyBmb3IgYSBgbG9nZ2luZy9zZXRMZXZlbGAgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNldExldmVsUmVxdWVzdFBhcmFtc1NjaGVtYSA9IEJhc2VSZXF1ZXN0UGFyYW1zU2NoZW1hLmV4dGVuZCh7XG4gICAgLyoqXG4gICAgICogVGhlIGxldmVsIG9mIGxvZ2dpbmcgdGhhdCB0aGUgY2xpZW50IHdhbnRzIHRvIHJlY2VpdmUgZnJvbSB0aGUgc2VydmVyLiBUaGUgc2VydmVyIHNob3VsZCBzZW5kIGFsbCBsb2dzIGF0IHRoaXMgbGV2ZWwgYW5kIGhpZ2hlciAoaS5lLiwgbW9yZSBzZXZlcmUpIHRvIHRoZSBjbGllbnQgYXMgbm90aWZpY2F0aW9ucy9sb2dnaW5nL21lc3NhZ2UuXG4gICAgICovXG4gICAgbGV2ZWw6IExvZ2dpbmdMZXZlbFNjaGVtYVxufSk7XG4vKipcbiAqIEEgcmVxdWVzdCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlciwgdG8gZW5hYmxlIG9yIGFkanVzdCBsb2dnaW5nLlxuICovXG5leHBvcnQgY29uc3QgU2V0TGV2ZWxSZXF1ZXN0U2NoZW1hID0gUmVxdWVzdFNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKCdsb2dnaW5nL3NldExldmVsJyksXG4gICAgcGFyYW1zOiBTZXRMZXZlbFJlcXVlc3RQYXJhbXNTY2hlbWFcbn0pO1xuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBhIGBub3RpZmljYXRpb25zL21lc3NhZ2VgIG5vdGlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2dpbmdNZXNzYWdlTm90aWZpY2F0aW9uUGFyYW1zU2NoZW1hID0gTm90aWZpY2F0aW9uc1BhcmFtc1NjaGVtYS5leHRlbmQoe1xuICAgIC8qKlxuICAgICAqIFRoZSBzZXZlcml0eSBvZiB0aGlzIGxvZyBtZXNzYWdlLlxuICAgICAqL1xuICAgIGxldmVsOiBMb2dnaW5nTGV2ZWxTY2hlbWEsXG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgbG9nZ2VyIGlzc3VpbmcgdGhpcyBtZXNzYWdlLlxuICAgICAqL1xuICAgIGxvZ2dlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRvIGJlIGxvZ2dlZCwgc3VjaCBhcyBhIHN0cmluZyBtZXNzYWdlIG9yIGFuIG9iamVjdC4gQW55IEpTT04gc2VyaWFsaXphYmxlIHR5cGUgaXMgYWxsb3dlZCBoZXJlLlxuICAgICAqL1xuICAgIGRhdGE6IHoudW5rbm93bigpXG59KTtcbi8qKlxuICogTm90aWZpY2F0aW9uIG9mIGEgbG9nIG1lc3NhZ2UgcGFzc2VkIGZyb20gc2VydmVyIHRvIGNsaWVudC4gSWYgbm8gbG9nZ2luZy9zZXRMZXZlbCByZXF1ZXN0IGhhcyBiZWVuIHNlbnQgZnJvbSB0aGUgY2xpZW50LCB0aGUgc2VydmVyIE1BWSBkZWNpZGUgd2hpY2ggbWVzc2FnZXMgdG8gc2VuZCBhdXRvbWF0aWNhbGx5LlxuICovXG5leHBvcnQgY29uc3QgTG9nZ2luZ01lc3NhZ2VOb3RpZmljYXRpb25TY2hlbWEgPSBOb3RpZmljYXRpb25TY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXRob2Q6IHoubGl0ZXJhbCgnbm90aWZpY2F0aW9ucy9tZXNzYWdlJyksXG4gICAgcGFyYW1zOiBMb2dnaW5nTWVzc2FnZU5vdGlmaWNhdGlvblBhcmFtc1NjaGVtYVxufSk7XG4vKiBTYW1wbGluZyAqL1xuLyoqXG4gKiBIaW50cyB0byB1c2UgZm9yIG1vZGVsIHNlbGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vZGVsSGludFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAgICAgKiBBIGhpbnQgZm9yIGEgbW9kZWwgbmFtZS5cbiAgICAgKi9cbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuLyoqXG4gKiBUaGUgc2VydmVyJ3MgcHJlZmVyZW5jZXMgZm9yIG1vZGVsIHNlbGVjdGlvbiwgcmVxdWVzdGVkIG9mIHRoZSBjbGllbnQgZHVyaW5nIHNhbXBsaW5nLlxuICovXG5leHBvcnQgY29uc3QgTW9kZWxQcmVmZXJlbmNlc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBoaW50cyB0byB1c2UgZm9yIG1vZGVsIHNlbGVjdGlvbi5cbiAgICAgKi9cbiAgICBoaW50czogei5hcnJheShNb2RlbEhpbnRTY2hlbWEpLm9wdGlvbmFsKCksXG4gICAgLyoqXG4gICAgICogSG93IG11Y2ggdG8gcHJpb3JpdGl6ZSBjb3N0IHdoZW4gc2VsZWN0aW5nIGEgbW9kZWwuXG4gICAgICovXG4gICAgY29zdFByaW9yaXR5OiB6Lm51bWJlcigpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBIb3cgbXVjaCB0byBwcmlvcml0aXplIHNhbXBsaW5nIHNwZWVkIChsYXRlbmN5KSB3aGVuIHNlbGVjdGluZyBhIG1vZGVsLlxuICAgICAqL1xuICAgIHNwZWVkUHJpb3JpdHk6IHoubnVtYmVyKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIEhvdyBtdWNoIHRvIHByaW9yaXRpemUgaW50ZWxsaWdlbmNlIGFuZCBjYXBhYmlsaXRpZXMgd2hlbiBzZWxlY3RpbmcgYSBtb2RlbC5cbiAgICAgKi9cbiAgICBpbnRlbGxpZ2VuY2VQcmlvcml0eTogei5udW1iZXIoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKClcbn0pO1xuLyoqXG4gKiBDb250cm9scyB0b29sIHVzYWdlIGJlaGF2aW9yIGluIHNhbXBsaW5nIHJlcXVlc3RzLlxuICovXG5leHBvcnQgY29uc3QgVG9vbENob2ljZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAvKipcbiAgICAgKiBDb250cm9scyB3aGVuIHRvb2xzIGFyZSB1c2VkOlxuICAgICAqIC0gXCJhdXRvXCI6IE1vZGVsIGRlY2lkZXMgd2hldGhlciB0byB1c2UgdG9vbHMgKGRlZmF1bHQpXG4gICAgICogLSBcInJlcXVpcmVkXCI6IE1vZGVsIE1VU1QgdXNlIGF0IGxlYXN0IG9uZSB0b29sIGJlZm9yZSBjb21wbGV0aW5nXG4gICAgICogLSBcIm5vbmVcIjogTW9kZWwgTVVTVCBOT1QgdXNlIGFueSB0b29sc1xuICAgICAqL1xuICAgIG1vZGU6IHouZW51bShbJ2F1dG8nLCAncmVxdWlyZWQnLCAnbm9uZSddKS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogVGhlIHJlc3VsdCBvZiBhIHRvb2wgZXhlY3V0aW9uLCBwcm92aWRlZCBieSB0aGUgdXNlciAoc2VydmVyKS5cbiAqIFJlcHJlc2VudHMgdGhlIG91dGNvbWUgb2YgaW52b2tpbmcgYSB0b29sIHJlcXVlc3RlZCB2aWEgVG9vbFVzZUNvbnRlbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBUb29sUmVzdWx0Q29udGVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoJ3Rvb2xfcmVzdWx0JyksXG4gICAgdG9vbFVzZUlkOiB6LnN0cmluZygpLmRlc2NyaWJlKCdUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHRvb2wgY2FsbC4nKSxcbiAgICBjb250ZW50OiB6LmFycmF5KENvbnRlbnRCbG9ja1NjaGVtYSkuZGVmYXVsdChbXSksXG4gICAgc3RydWN0dXJlZENvbnRlbnQ6IHoub2JqZWN0KHt9KS5sb29zZSgpLm9wdGlvbmFsKCksXG4gICAgaXNFcnJvcjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBTZWUgW01DUCBzcGVjaWZpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vbW9kZWxjb250ZXh0cHJvdG9jb2wvbW9kZWxjb250ZXh0cHJvdG9jb2wvYmxvYi80NzMzOWMwM2MxNDNiYjRlYzAxYTI2ZTcyMWExYjhmZTY2NjM0ZWJlL2RvY3Mvc3BlY2lmaWNhdGlvbi9kcmFmdC9iYXNpYy9pbmRleC5tZHgjZ2VuZXJhbC1maWVsZHMpXG4gICAgICogZm9yIG5vdGVzIG9uIF9tZXRhIHVzYWdlLlxuICAgICAqL1xuICAgIF9tZXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKVxufSk7XG4vKipcbiAqIEJhc2ljIGNvbnRlbnQgdHlwZXMgZm9yIHNhbXBsaW5nIHJlc3BvbnNlcyAod2l0aG91dCB0b29sIHVzZSkuXG4gKiBVc2VkIGZvciBiYWNrd2FyZHMtY29tcGF0aWJsZSBDcmVhdGVNZXNzYWdlUmVzdWx0IHdoZW4gdG9vbHMgYXJlIG5vdCB1c2VkLlxuICovXG5leHBvcnQgY29uc3QgU2FtcGxpbmdDb250ZW50U2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oJ3R5cGUnLCBbVGV4dENvbnRlbnRTY2hlbWEsIEltYWdlQ29udGVudFNjaGVtYSwgQXVkaW9Db250ZW50U2NoZW1hXSk7XG4vKipcbiAqIENvbnRlbnQgYmxvY2sgdHlwZXMgYWxsb3dlZCBpbiBzYW1wbGluZyBtZXNzYWdlcy5cbiAqIFRoaXMgaW5jbHVkZXMgdGV4dCwgaW1hZ2UsIGF1ZGlvLCB0b29sIHVzZSByZXF1ZXN0cywgYW5kIHRvb2wgcmVzdWx0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNhbXBsaW5nTWVzc2FnZUNvbnRlbnRCbG9ja1NjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKCd0eXBlJywgW1xuICAgIFRleHRDb250ZW50U2NoZW1hLFxuICAgIEltYWdlQ29udGVudFNjaGVtYSxcbiAgICBBdWRpb0NvbnRlbnRTY2hlbWEsXG4gICAgVG9vbFVzZUNvbnRlbnRTY2hlbWEsXG4gICAgVG9vbFJlc3VsdENvbnRlbnRTY2hlbWFcbl0pO1xuLyoqXG4gKiBEZXNjcmliZXMgYSBtZXNzYWdlIGlzc3VlZCB0byBvciByZWNlaXZlZCBmcm9tIGFuIExMTSBBUEkuXG4gKi9cbmV4cG9ydCBjb25zdCBTYW1wbGluZ01lc3NhZ2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgcm9sZTogUm9sZVNjaGVtYSxcbiAgICBjb250ZW50OiB6LnVuaW9uKFtTYW1wbGluZ01lc3NhZ2VDb250ZW50QmxvY2tTY2hlbWEsIHouYXJyYXkoU2FtcGxpbmdNZXNzYWdlQ29udGVudEJsb2NrU2NoZW1hKV0pLFxuICAgIC8qKlxuICAgICAqIFNlZSBbTUNQIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9tb2RlbGNvbnRleHRwcm90b2NvbC9tb2RlbGNvbnRleHRwcm90b2NvbC9ibG9iLzQ3MzM5YzAzYzE0M2JiNGVjMDFhMjZlNzIxYTFiOGZlNjY2MzRlYmUvZG9jcy9zcGVjaWZpY2F0aW9uL2RyYWZ0L2Jhc2ljL2luZGV4Lm1keCNnZW5lcmFsLWZpZWxkcylcbiAgICAgKiBmb3Igbm90ZXMgb24gX21ldGEgdXNhZ2UuXG4gICAgICovXG4gICAgX21ldGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogUGFyYW1ldGVycyBmb3IgYSBgc2FtcGxpbmcvY3JlYXRlTWVzc2FnZWAgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IENyZWF0ZU1lc3NhZ2VSZXF1ZXN0UGFyYW1zU2NoZW1hID0gVGFza0F1Z21lbnRlZFJlcXVlc3RQYXJhbXNTY2hlbWEuZXh0ZW5kKHtcbiAgICBtZXNzYWdlczogei5hcnJheShTYW1wbGluZ01lc3NhZ2VTY2hlbWEpLFxuICAgIC8qKlxuICAgICAqIFRoZSBzZXJ2ZXIncyBwcmVmZXJlbmNlcyBmb3Igd2hpY2ggbW9kZWwgdG8gc2VsZWN0LiBUaGUgY2xpZW50IE1BWSBtb2RpZnkgb3Igb21pdCB0aGlzIHJlcXVlc3QuXG4gICAgICovXG4gICAgbW9kZWxQcmVmZXJlbmNlczogTW9kZWxQcmVmZXJlbmNlc1NjaGVtYS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIHN5c3RlbSBwcm9tcHQgdGhlIHNlcnZlciB3YW50cyB0byB1c2UgZm9yIHNhbXBsaW5nLiBUaGUgY2xpZW50IE1BWSBtb2RpZnkgb3Igb21pdCB0aGlzIHByb21wdC5cbiAgICAgKi9cbiAgICBzeXN0ZW1Qcm9tcHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBBIHJlcXVlc3QgdG8gaW5jbHVkZSBjb250ZXh0IGZyb20gb25lIG9yIG1vcmUgTUNQIHNlcnZlcnMgKGluY2x1ZGluZyB0aGUgY2FsbGVyKSwgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIHByb21wdC5cbiAgICAgKiBUaGUgY2xpZW50IE1BWSBpZ25vcmUgdGhpcyByZXF1ZXN0LlxuICAgICAqXG4gICAgICogRGVmYXVsdCBpcyBcIm5vbmVcIi4gVmFsdWVzIFwidGhpc1NlcnZlclwiIGFuZCBcImFsbFNlcnZlcnNcIiBhcmUgc29mdC1kZXByZWNhdGVkLiBTZXJ2ZXJzIFNIT1VMRCBvbmx5IHVzZSB0aGVzZSB2YWx1ZXMgaWYgdGhlIGNsaWVudFxuICAgICAqIGRlY2xhcmVzIENsaWVudENhcGFiaWxpdGllcy5zYW1wbGluZy5jb250ZXh0LiBUaGVzZSB2YWx1ZXMgbWF5IGJlIHJlbW92ZWQgaW4gZnV0dXJlIHNwZWMgcmVsZWFzZXMuXG4gICAgICovXG4gICAgaW5jbHVkZUNvbnRleHQ6IHouZW51bShbJ25vbmUnLCAndGhpc1NlcnZlcicsICdhbGxTZXJ2ZXJzJ10pLm9wdGlvbmFsKCksXG4gICAgdGVtcGVyYXR1cmU6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICAvKipcbiAgICAgKiBUaGUgcmVxdWVzdGVkIG1heGltdW0gbnVtYmVyIG9mIHRva2VucyB0byBzYW1wbGUgKHRvIHByZXZlbnQgcnVuYXdheSBjb21wbGV0aW9ucykuXG4gICAgICpcbiAgICAgKiBUaGUgY2xpZW50IE1BWSBjaG9vc2UgdG8gc2FtcGxlIGZld2VyIHRva2VucyB0aGFuIHRoZSByZXF1ZXN0ZWQgbWF4aW11bS5cbiAgICAgKi9cbiAgICBtYXhUb2tlbnM6IHoubnVtYmVyKCkuaW50KCksXG4gICAgc3RvcFNlcXVlbmNlczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIG1ldGFkYXRhIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgTExNIHByb3ZpZGVyLiBUaGUgZm9ybWF0IG9mIHRoaXMgbWV0YWRhdGEgaXMgcHJvdmlkZXItc3BlY2lmaWMuXG4gICAgICovXG4gICAgbWV0YWRhdGE6IEFzc2VydE9iamVjdFNjaGVtYS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIFRvb2xzIHRoYXQgdGhlIG1vZGVsIG1heSB1c2UgZHVyaW5nIGdlbmVyYXRpb24uXG4gICAgICogVGhlIGNsaWVudCBNVVNUIHJldHVybiBhbiBlcnJvciBpZiB0aGlzIGZpZWxkIGlzIHByb3ZpZGVkIGJ1dCBDbGllbnRDYXBhYmlsaXRpZXMuc2FtcGxpbmcudG9vbHMgaXMgbm90IGRlY2xhcmVkLlxuICAgICAqL1xuICAgIHRvb2xzOiB6LmFycmF5KFRvb2xTY2hlbWEpLm9wdGlvbmFsKCksXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgaG93IHRoZSBtb2RlbCB1c2VzIHRvb2xzLlxuICAgICAqIFRoZSBjbGllbnQgTVVTVCByZXR1cm4gYW4gZXJyb3IgaWYgdGhpcyBmaWVsZCBpcyBwcm92aWRlZCBidXQgQ2xpZW50Q2FwYWJpbGl0aWVzLnNhbXBsaW5nLnRvb2xzIGlzIG5vdCBkZWNsYXJlZC5cbiAgICAgKiBEZWZhdWx0IGlzIGB7IG1vZGU6IFwiYXV0b1wiIH1gLlxuICAgICAqL1xuICAgIHRvb2xDaG9pY2U6IFRvb2xDaG9pY2VTY2hlbWEub3B0aW9uYWwoKVxufSk7XG4vKipcbiAqIEEgcmVxdWVzdCBmcm9tIHRoZSBzZXJ2ZXIgdG8gc2FtcGxlIGFuIExMTSB2aWEgdGhlIGNsaWVudC4gVGhlIGNsaWVudCBoYXMgZnVsbCBkaXNjcmV0aW9uIG92ZXIgd2hpY2ggbW9kZWwgdG8gc2VsZWN0LiBUaGUgY2xpZW50IHNob3VsZCBhbHNvIGluZm9ybSB0aGUgdXNlciBiZWZvcmUgYmVnaW5uaW5nIHNhbXBsaW5nLCB0byBhbGxvdyB0aGVtIHRvIGluc3BlY3QgdGhlIHJlcXVlc3QgKGh1bWFuIGluIHRoZSBsb29wKSBhbmQgZGVjaWRlIHdoZXRoZXIgdG8gYXBwcm92ZSBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IENyZWF0ZU1lc3NhZ2VSZXF1ZXN0U2NoZW1hID0gUmVxdWVzdFNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKCdzYW1wbGluZy9jcmVhdGVNZXNzYWdlJyksXG4gICAgcGFyYW1zOiBDcmVhdGVNZXNzYWdlUmVxdWVzdFBhcmFtc1NjaGVtYVxufSk7XG4vKipcbiAqIFRoZSBjbGllbnQncyByZXNwb25zZSB0byBhIHNhbXBsaW5nL2NyZWF0ZV9tZXNzYWdlIHJlcXVlc3QgZnJvbSB0aGUgc2VydmVyLlxuICogVGhpcyBpcyB0aGUgYmFja3dhcmRzLWNvbXBhdGlibGUgdmVyc2lvbiB0aGF0IHJldHVybnMgc2luZ2xlIGNvbnRlbnQgKG5vIGFycmF5cykuXG4gKiBVc2VkIHdoZW4gdGhlIHJlcXVlc3QgZG9lcyBub3QgaW5jbHVkZSB0b29scy5cbiAqL1xuZXhwb3J0IGNvbnN0IENyZWF0ZU1lc3NhZ2VSZXN1bHRTY2hlbWEgPSBSZXN1bHRTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgbW9kZWwgdGhhdCBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UuXG4gICAgICovXG4gICAgbW9kZWw6IHouc3RyaW5nKCksXG4gICAgLyoqXG4gICAgICogVGhlIHJlYXNvbiB3aHkgc2FtcGxpbmcgc3RvcHBlZCwgaWYga25vd24uXG4gICAgICpcbiAgICAgKiBTdGFuZGFyZCB2YWx1ZXM6XG4gICAgICogLSBcImVuZFR1cm5cIjogTmF0dXJhbCBlbmQgb2YgdGhlIGFzc2lzdGFudCdzIHR1cm5cbiAgICAgKiAtIFwic3RvcFNlcXVlbmNlXCI6IEEgc3RvcCBzZXF1ZW5jZSB3YXMgZW5jb3VudGVyZWRcbiAgICAgKiAtIFwibWF4VG9rZW5zXCI6IE1heGltdW0gdG9rZW4gbGltaXQgd2FzIHJlYWNoZWRcbiAgICAgKlxuICAgICAqIFRoaXMgZmllbGQgaXMgYW4gb3BlbiBzdHJpbmcgdG8gYWxsb3cgZm9yIHByb3ZpZGVyLXNwZWNpZmljIHN0b3AgcmVhc29ucy5cbiAgICAgKi9cbiAgICBzdG9wUmVhc29uOiB6Lm9wdGlvbmFsKHouZW51bShbJ2VuZFR1cm4nLCAnc3RvcFNlcXVlbmNlJywgJ21heFRva2VucyddKS5vcih6LnN0cmluZygpKSksXG4gICAgcm9sZTogUm9sZVNjaGVtYSxcbiAgICAvKipcbiAgICAgKiBSZXNwb25zZSBjb250ZW50LiBTaW5nbGUgY29udGVudCBibG9jayAodGV4dCwgaW1hZ2UsIG9yIGF1ZGlvKS5cbiAgICAgKi9cbiAgICBjb250ZW50OiBTYW1wbGluZ0NvbnRlbnRTY2hlbWFcbn0pO1xuLyoqXG4gKiBUaGUgY2xpZW50J3MgcmVzcG9uc2UgdG8gYSBzYW1wbGluZy9jcmVhdGVfbWVzc2FnZSByZXF1ZXN0IHdoZW4gdG9vbHMgd2VyZSBwcm92aWRlZC5cbiAqIFRoaXMgdmVyc2lvbiBzdXBwb3J0cyBhcnJheSBjb250ZW50IGZvciB0b29sIHVzZSBmbG93cy5cbiAqL1xuZXhwb3J0IGNvbnN0IENyZWF0ZU1lc3NhZ2VSZXN1bHRXaXRoVG9vbHNTY2hlbWEgPSBSZXN1bHRTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgbW9kZWwgdGhhdCBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UuXG4gICAgICovXG4gICAgbW9kZWw6IHouc3RyaW5nKCksXG4gICAgLyoqXG4gICAgICogVGhlIHJlYXNvbiB3aHkgc2FtcGxpbmcgc3RvcHBlZCwgaWYga25vd24uXG4gICAgICpcbiAgICAgKiBTdGFuZGFyZCB2YWx1ZXM6XG4gICAgICogLSBcImVuZFR1cm5cIjogTmF0dXJhbCBlbmQgb2YgdGhlIGFzc2lzdGFudCdzIHR1cm5cbiAgICAgKiAtIFwic3RvcFNlcXVlbmNlXCI6IEEgc3RvcCBzZXF1ZW5jZSB3YXMgZW5jb3VudGVyZWRcbiAgICAgKiAtIFwibWF4VG9rZW5zXCI6IE1heGltdW0gdG9rZW4gbGltaXQgd2FzIHJlYWNoZWRcbiAgICAgKiAtIFwidG9vbFVzZVwiOiBUaGUgbW9kZWwgd2FudHMgdG8gdXNlIG9uZSBvciBtb3JlIHRvb2xzXG4gICAgICpcbiAgICAgKiBUaGlzIGZpZWxkIGlzIGFuIG9wZW4gc3RyaW5nIHRvIGFsbG93IGZvciBwcm92aWRlci1zcGVjaWZpYyBzdG9wIHJlYXNvbnMuXG4gICAgICovXG4gICAgc3RvcFJlYXNvbjogei5vcHRpb25hbCh6LmVudW0oWydlbmRUdXJuJywgJ3N0b3BTZXF1ZW5jZScsICdtYXhUb2tlbnMnLCAndG9vbFVzZSddKS5vcih6LnN0cmluZygpKSksXG4gICAgcm9sZTogUm9sZVNjaGVtYSxcbiAgICAvKipcbiAgICAgKiBSZXNwb25zZSBjb250ZW50LiBNYXkgYmUgYSBzaW5nbGUgYmxvY2sgb3IgYXJyYXkuIE1heSBpbmNsdWRlIFRvb2xVc2VDb250ZW50IGlmIHN0b3BSZWFzb24gaXMgXCJ0b29sVXNlXCIuXG4gICAgICovXG4gICAgY29udGVudDogei51bmlvbihbU2FtcGxpbmdNZXNzYWdlQ29udGVudEJsb2NrU2NoZW1hLCB6LmFycmF5KFNhbXBsaW5nTWVzc2FnZUNvbnRlbnRCbG9ja1NjaGVtYSldKVxufSk7XG4vKiBFbGljaXRhdGlvbiAqL1xuLyoqXG4gKiBQcmltaXRpdmUgc2NoZW1hIGRlZmluaXRpb24gZm9yIGJvb2xlYW4gZmllbGRzLlxuICovXG5leHBvcnQgY29uc3QgQm9vbGVhblNjaGVtYVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoJ2Jvb2xlYW4nKSxcbiAgICB0aXRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGVmYXVsdDogei5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG4vKipcbiAqIFByaW1pdGl2ZSBzY2hlbWEgZGVmaW5pdGlvbiBmb3Igc3RyaW5nIGZpZWxkcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0cmluZ1NjaGVtYVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoJ3N0cmluZycpLFxuICAgIHRpdGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBtaW5MZW5ndGg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBtYXhMZW5ndGg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBmb3JtYXQ6IHouZW51bShbJ2VtYWlsJywgJ3VyaScsICdkYXRlJywgJ2RhdGUtdGltZSddKS5vcHRpb25hbCgpLFxuICAgIGRlZmF1bHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG4vKipcbiAqIFByaW1pdGl2ZSBzY2hlbWEgZGVmaW5pdGlvbiBmb3IgbnVtYmVyIGZpZWxkcy5cbiAqL1xuZXhwb3J0IGNvbnN0IE51bWJlclNjaGVtYVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmVudW0oWydudW1iZXInLCAnaW50ZWdlciddKSxcbiAgICB0aXRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbWluaW11bTogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIG1heGltdW06IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBkZWZhdWx0OiB6Lm51bWJlcigpLm9wdGlvbmFsKClcbn0pO1xuLyoqXG4gKiBTY2hlbWEgZm9yIHNpbmdsZS1zZWxlY3Rpb24gZW51bWVyYXRpb24gd2l0aG91dCBkaXNwbGF5IHRpdGxlcyBmb3Igb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IFVudGl0bGVkU2luZ2xlU2VsZWN0RW51bVNjaGVtYVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoJ3N0cmluZycpLFxuICAgIHRpdGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBlbnVtOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGRlZmF1bHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG4vKipcbiAqIFNjaGVtYSBmb3Igc2luZ2xlLXNlbGVjdGlvbiBlbnVtZXJhdGlvbiB3aXRoIGRpc3BsYXkgdGl0bGVzIGZvciBlYWNoIG9wdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFRpdGxlZFNpbmdsZVNlbGVjdEVudW1TY2hlbWFTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKCdzdHJpbmcnKSxcbiAgICB0aXRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgb25lT2Y6IHouYXJyYXkoei5vYmplY3Qoe1xuICAgICAgICBjb25zdDogei5zdHJpbmcoKSxcbiAgICAgICAgdGl0bGU6IHouc3RyaW5nKClcbiAgICB9KSksXG4gICAgZGVmYXVsdDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogVXNlIFRpdGxlZFNpbmdsZVNlbGVjdEVudW1TY2hlbWEgaW5zdGVhZC5cbiAqIFRoaXMgaW50ZXJmYWNlIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgY29uc3QgTGVnYWN5VGl0bGVkRW51bVNjaGVtYVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoJ3N0cmluZycpLFxuICAgIHRpdGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBlbnVtOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGVudW1OYW1lczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIGRlZmF1bHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG4vLyBDb21iaW5lZCBzaW5nbGUgc2VsZWN0aW9uIGVudW1lcmF0aW9uXG5leHBvcnQgY29uc3QgU2luZ2xlU2VsZWN0RW51bVNjaGVtYVNjaGVtYSA9IHoudW5pb24oW1VudGl0bGVkU2luZ2xlU2VsZWN0RW51bVNjaGVtYVNjaGVtYSwgVGl0bGVkU2luZ2xlU2VsZWN0RW51bVNjaGVtYVNjaGVtYV0pO1xuLyoqXG4gKiBTY2hlbWEgZm9yIG11bHRpcGxlLXNlbGVjdGlvbiBlbnVtZXJhdGlvbiB3aXRob3V0IGRpc3BsYXkgdGl0bGVzIGZvciBvcHRpb25zLlxuICovXG5leHBvcnQgY29uc3QgVW50aXRsZWRNdWx0aVNlbGVjdEVudW1TY2hlbWFTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKCdhcnJheScpLFxuICAgIHRpdGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBtaW5JdGVtczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIG1heEl0ZW1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgaXRlbXM6IHoub2JqZWN0KHtcbiAgICAgICAgdHlwZTogei5saXRlcmFsKCdzdHJpbmcnKSxcbiAgICAgICAgZW51bTogei5hcnJheSh6LnN0cmluZygpKVxuICAgIH0pLFxuICAgIGRlZmF1bHQ6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG4vKipcbiAqIFNjaGVtYSBmb3IgbXVsdGlwbGUtc2VsZWN0aW9uIGVudW1lcmF0aW9uIHdpdGggZGlzcGxheSB0aXRsZXMgZm9yIGVhY2ggb3B0aW9uLlxuICovXG5leHBvcnQgY29uc3QgVGl0bGVkTXVsdGlTZWxlY3RFbnVtU2NoZW1hU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbCgnYXJyYXknKSxcbiAgICB0aXRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbWluSXRlbXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBtYXhJdGVtczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGl0ZW1zOiB6Lm9iamVjdCh7XG4gICAgICAgIGFueU9mOiB6LmFycmF5KHoub2JqZWN0KHtcbiAgICAgICAgICAgIGNvbnN0OiB6LnN0cmluZygpLFxuICAgICAgICAgICAgdGl0bGU6IHouc3RyaW5nKClcbiAgICAgICAgfSkpXG4gICAgfSksXG4gICAgZGVmYXVsdDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogQ29tYmluZWQgc2NoZW1hIGZvciBtdWx0aXBsZS1zZWxlY3Rpb24gZW51bWVyYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IE11bHRpU2VsZWN0RW51bVNjaGVtYVNjaGVtYSA9IHoudW5pb24oW1VudGl0bGVkTXVsdGlTZWxlY3RFbnVtU2NoZW1hU2NoZW1hLCBUaXRsZWRNdWx0aVNlbGVjdEVudW1TY2hlbWFTY2hlbWFdKTtcbi8qKlxuICogUHJpbWl0aXZlIHNjaGVtYSBkZWZpbml0aW9uIGZvciBlbnVtIGZpZWxkcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVudW1TY2hlbWFTY2hlbWEgPSB6LnVuaW9uKFtMZWdhY3lUaXRsZWRFbnVtU2NoZW1hU2NoZW1hLCBTaW5nbGVTZWxlY3RFbnVtU2NoZW1hU2NoZW1hLCBNdWx0aVNlbGVjdEVudW1TY2hlbWFTY2hlbWFdKTtcbi8qKlxuICogVW5pb24gb2YgYWxsIHByaW1pdGl2ZSBzY2hlbWEgZGVmaW5pdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBQcmltaXRpdmVTY2hlbWFEZWZpbml0aW9uU2NoZW1hID0gei51bmlvbihbRW51bVNjaGVtYVNjaGVtYSwgQm9vbGVhblNjaGVtYVNjaGVtYSwgU3RyaW5nU2NoZW1hU2NoZW1hLCBOdW1iZXJTY2hlbWFTY2hlbWFdKTtcbi8qKlxuICogUGFyYW1ldGVycyBmb3IgYW4gYGVsaWNpdGF0aW9uL2NyZWF0ZWAgcmVxdWVzdCBmb3IgZm9ybS1iYXNlZCBlbGljaXRhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEVsaWNpdFJlcXVlc3RGb3JtUGFyYW1zU2NoZW1hID0gVGFza0F1Z21lbnRlZFJlcXVlc3RQYXJhbXNTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBUaGUgZWxpY2l0YXRpb24gbW9kZS5cbiAgICAgKlxuICAgICAqIE9wdGlvbmFsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBDbGllbnRzIE1VU1QgdHJlYXQgbWlzc2luZyBtb2RlIGFzIFwiZm9ybVwiLlxuICAgICAqL1xuICAgIG1vZGU6IHoubGl0ZXJhbCgnZm9ybScpLm9wdGlvbmFsKCksXG4gICAgLyoqXG4gICAgICogVGhlIG1lc3NhZ2UgdG8gcHJlc2VudCB0byB0aGUgdXNlciBkZXNjcmliaW5nIHdoYXQgaW5mb3JtYXRpb24gaXMgYmVpbmcgcmVxdWVzdGVkLlxuICAgICAqL1xuICAgIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gICAgLyoqXG4gICAgICogQSByZXN0cmljdGVkIHN1YnNldCBvZiBKU09OIFNjaGVtYS5cbiAgICAgKiBPbmx5IHRvcC1sZXZlbCBwcm9wZXJ0aWVzIGFyZSBhbGxvd2VkLCB3aXRob3V0IG5lc3RpbmcuXG4gICAgICovXG4gICAgcmVxdWVzdGVkU2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICAgIHR5cGU6IHoubGl0ZXJhbCgnb2JqZWN0JyksXG4gICAgICAgIHByb3BlcnRpZXM6IHoucmVjb3JkKHouc3RyaW5nKCksIFByaW1pdGl2ZVNjaGVtYURlZmluaXRpb25TY2hlbWEpLFxuICAgICAgICByZXF1aXJlZDogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpXG4gICAgfSlcbn0pO1xuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBhbiBgZWxpY2l0YXRpb24vY3JlYXRlYCByZXF1ZXN0IGZvciBVUkwtYmFzZWQgZWxpY2l0YXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBFbGljaXRSZXF1ZXN0VVJMUGFyYW1zU2NoZW1hID0gVGFza0F1Z21lbnRlZFJlcXVlc3RQYXJhbXNTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBUaGUgZWxpY2l0YXRpb24gbW9kZS5cbiAgICAgKi9cbiAgICBtb2RlOiB6LmxpdGVyYWwoJ3VybCcpLFxuICAgIC8qKlxuICAgICAqIFRoZSBtZXNzYWdlIHRvIHByZXNlbnQgdG8gdGhlIHVzZXIgZXhwbGFpbmluZyB3aHkgdGhlIGludGVyYWN0aW9uIGlzIG5lZWRlZC5cbiAgICAgKi9cbiAgICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICAgIC8qKlxuICAgICAqIFRoZSBJRCBvZiB0aGUgZWxpY2l0YXRpb24sIHdoaWNoIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgc2VydmVyLlxuICAgICAqIFRoZSBjbGllbnQgTVVTVCB0cmVhdCB0aGlzIElEIGFzIGFuIG9wYXF1ZSB2YWx1ZS5cbiAgICAgKi9cbiAgICBlbGljaXRhdGlvbklkOiB6LnN0cmluZygpLFxuICAgIC8qKlxuICAgICAqIFRoZSBVUkwgdGhhdCB0aGUgdXNlciBzaG91bGQgbmF2aWdhdGUgdG8uXG4gICAgICovXG4gICAgdXJsOiB6LnN0cmluZygpLnVybCgpXG59KTtcbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGEgcmVxdWVzdCB0byBlbGljaXQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1c2VyIHZpYSB0aGUgY2xpZW50LlxuICovXG5leHBvcnQgY29uc3QgRWxpY2l0UmVxdWVzdFBhcmFtc1NjaGVtYSA9IHoudW5pb24oW0VsaWNpdFJlcXVlc3RGb3JtUGFyYW1zU2NoZW1hLCBFbGljaXRSZXF1ZXN0VVJMUGFyYW1zU2NoZW1hXSk7XG4vKipcbiAqIEEgcmVxdWVzdCBmcm9tIHRoZSBzZXJ2ZXIgdG8gZWxpY2l0IHVzZXIgaW5wdXQgdmlhIHRoZSBjbGllbnQuXG4gKiBUaGUgY2xpZW50IHNob3VsZCBwcmVzZW50IHRoZSBtZXNzYWdlIGFuZCBmb3JtIGZpZWxkcyB0byB0aGUgdXNlciAoZm9ybSBtb2RlKVxuICogb3IgbmF2aWdhdGUgdG8gYSBVUkwgKFVSTCBtb2RlKS5cbiAqL1xuZXhwb3J0IGNvbnN0IEVsaWNpdFJlcXVlc3RTY2hlbWEgPSBSZXF1ZXN0U2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoJ2VsaWNpdGF0aW9uL2NyZWF0ZScpLFxuICAgIHBhcmFtczogRWxpY2l0UmVxdWVzdFBhcmFtc1NjaGVtYVxufSk7XG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIGEgYG5vdGlmaWNhdGlvbnMvZWxpY2l0YXRpb24vY29tcGxldGVgIG5vdGlmaWNhdGlvbi5cbiAqXG4gKiBAY2F0ZWdvcnkgbm90aWZpY2F0aW9ucy9lbGljaXRhdGlvbi9jb21wbGV0ZVxuICovXG5leHBvcnQgY29uc3QgRWxpY2l0YXRpb25Db21wbGV0ZU5vdGlmaWNhdGlvblBhcmFtc1NjaGVtYSA9IE5vdGlmaWNhdGlvbnNQYXJhbXNTY2hlbWEuZXh0ZW5kKHtcbiAgICAvKipcbiAgICAgKiBUaGUgSUQgb2YgdGhlIGVsaWNpdGF0aW9uIHRoYXQgY29tcGxldGVkLlxuICAgICAqL1xuICAgIGVsaWNpdGF0aW9uSWQ6IHouc3RyaW5nKClcbn0pO1xuLyoqXG4gKiBBIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudCwgaW5mb3JtaW5nIGl0IG9mIGEgY29tcGxldGlvbiBvZiBhbiBvdXQtb2YtYmFuZCBlbGljaXRhdGlvbiByZXF1ZXN0LlxuICpcbiAqIEBjYXRlZ29yeSBub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlXG4gKi9cbmV4cG9ydCBjb25zdCBFbGljaXRhdGlvbkNvbXBsZXRlTm90aWZpY2F0aW9uU2NoZW1hID0gTm90aWZpY2F0aW9uU2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoJ25vdGlmaWNhdGlvbnMvZWxpY2l0YXRpb24vY29tcGxldGUnKSxcbiAgICBwYXJhbXM6IEVsaWNpdGF0aW9uQ29tcGxldGVOb3RpZmljYXRpb25QYXJhbXNTY2hlbWFcbn0pO1xuLyoqXG4gKiBUaGUgY2xpZW50J3MgcmVzcG9uc2UgdG8gYW4gZWxpY2l0YXRpb24vY3JlYXRlIHJlcXVlc3QgZnJvbSB0aGUgc2VydmVyLlxuICovXG5leHBvcnQgY29uc3QgRWxpY2l0UmVzdWx0U2NoZW1hID0gUmVzdWx0U2NoZW1hLmV4dGVuZCh7XG4gICAgLyoqXG4gICAgICogVGhlIHVzZXIgYWN0aW9uIGluIHJlc3BvbnNlIHRvIHRoZSBlbGljaXRhdGlvbi5cbiAgICAgKiAtIFwiYWNjZXB0XCI6IFVzZXIgc3VibWl0dGVkIHRoZSBmb3JtL2NvbmZpcm1lZCB0aGUgYWN0aW9uXG4gICAgICogLSBcImRlY2xpbmVcIjogVXNlciBleHBsaWNpdGx5IGRlY2xpbmUgdGhlIGFjdGlvblxuICAgICAqIC0gXCJjYW5jZWxcIjogVXNlciBkaXNtaXNzZWQgd2l0aG91dCBtYWtpbmcgYW4gZXhwbGljaXQgY2hvaWNlXG4gICAgICovXG4gICAgYWN0aW9uOiB6LmVudW0oWydhY2NlcHQnLCAnZGVjbGluZScsICdjYW5jZWwnXSksXG4gICAgLyoqXG4gICAgICogVGhlIHN1Ym1pdHRlZCBmb3JtIGRhdGEsIG9ubHkgcHJlc2VudCB3aGVuIGFjdGlvbiBpcyBcImFjY2VwdFwiLlxuICAgICAqIENvbnRhaW5zIHZhbHVlcyBtYXRjaGluZyB0aGUgcmVxdWVzdGVkIHNjaGVtYS5cbiAgICAgKiBQZXIgTUNQIHNwZWMsIGNvbnRlbnQgaXMgXCJ0eXBpY2FsbHkgb21pdHRlZFwiIGZvciBkZWNsaW5lL2NhbmNlbCBhY3Rpb25zLlxuICAgICAqIFdlIG5vcm1hbGl6ZSBudWxsIHRvIHVuZGVmaW5lZCBmb3IgbGVuaWVuY3kgd2hpbGUgbWFpbnRhaW5pbmcgdHlwZSBjb21wYXRpYmlsaXR5LlxuICAgICAqL1xuICAgIGNvbnRlbnQ6IHoucHJlcHJvY2Vzcyh2YWwgPT4gKHZhbCA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHZhbCksIHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5pb24oW3ouc3RyaW5nKCksIHoubnVtYmVyKCksIHouYm9vbGVhbigpLCB6LmFycmF5KHouc3RyaW5nKCkpXSkpLm9wdGlvbmFsKCkpXG59KTtcbi8qIEF1dG9jb21wbGV0ZSAqL1xuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byBhIHJlc291cmNlIG9yIHJlc291cmNlIHRlbXBsYXRlIGRlZmluaXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVRlbXBsYXRlUmVmZXJlbmNlU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbCgncmVmL3Jlc291cmNlJyksXG4gICAgLyoqXG4gICAgICogVGhlIFVSSSBvciBVUkkgdGVtcGxhdGUgb2YgdGhlIHJlc291cmNlLlxuICAgICAqL1xuICAgIHVyaTogei5zdHJpbmcoKVxufSk7XG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBSZXNvdXJjZVRlbXBsYXRlUmVmZXJlbmNlU2NoZW1hIGluc3RlYWRcbiAqL1xuZXhwb3J0IGNvbnN0IFJlc291cmNlUmVmZXJlbmNlU2NoZW1hID0gUmVzb3VyY2VUZW1wbGF0ZVJlZmVyZW5jZVNjaGVtYTtcbi8qKlxuICogSWRlbnRpZmllcyBhIHByb21wdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFByb21wdFJlZmVyZW5jZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoJ3JlZi9wcm9tcHQnKSxcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0IG9yIHByb21wdCB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIG5hbWU6IHouc3RyaW5nKClcbn0pO1xuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBhIGBjb21wbGV0aW9uL2NvbXBsZXRlYCByZXF1ZXN0LlxuICovXG5leHBvcnQgY29uc3QgQ29tcGxldGVSZXF1ZXN0UGFyYW1zU2NoZW1hID0gQmFzZVJlcXVlc3RQYXJhbXNTY2hlbWEuZXh0ZW5kKHtcbiAgICByZWY6IHoudW5pb24oW1Byb21wdFJlZmVyZW5jZVNjaGVtYSwgUmVzb3VyY2VUZW1wbGF0ZVJlZmVyZW5jZVNjaGVtYV0pLFxuICAgIC8qKlxuICAgICAqIFRoZSBhcmd1bWVudCdzIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgYXJndW1lbnQ6IHoub2JqZWN0KHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSBhcmd1bWVudFxuICAgICAgICAgKi9cbiAgICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgYXJndW1lbnQgdG8gdXNlIGZvciBjb21wbGV0aW9uIG1hdGNoaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFsdWU6IHouc3RyaW5nKClcbiAgICB9KSxcbiAgICBjb250ZXh0OiB6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJldmlvdXNseS1yZXNvbHZlZCB2YXJpYWJsZXMgaW4gYSBVUkkgdGVtcGxhdGUgb3IgcHJvbXB0LlxuICAgICAgICAgKi9cbiAgICAgICAgYXJndW1lbnRzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKClcbn0pO1xuLyoqXG4gKiBBIHJlcXVlc3QgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIsIHRvIGFzayBmb3IgY29tcGxldGlvbiBvcHRpb25zLlxuICovXG5leHBvcnQgY29uc3QgQ29tcGxldGVSZXF1ZXN0U2NoZW1hID0gUmVxdWVzdFNjaGVtYS5leHRlbmQoe1xuICAgIG1ldGhvZDogei5saXRlcmFsKCdjb21wbGV0aW9uL2NvbXBsZXRlJyksXG4gICAgcGFyYW1zOiBDb21wbGV0ZVJlcXVlc3RQYXJhbXNTY2hlbWFcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydENvbXBsZXRlUmVxdWVzdFByb21wdChyZXF1ZXN0KSB7XG4gICAgaWYgKHJlcXVlc3QucGFyYW1zLnJlZi50eXBlICE9PSAncmVmL3Byb21wdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgQ29tcGxldGVSZXF1ZXN0UHJvbXB0LCBidXQgZ290ICR7cmVxdWVzdC5wYXJhbXMucmVmLnR5cGV9YCk7XG4gICAgfVxuICAgIHZvaWQgcmVxdWVzdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRDb21wbGV0ZVJlcXVlc3RSZXNvdXJjZVRlbXBsYXRlKHJlcXVlc3QpIHtcbiAgICBpZiAocmVxdWVzdC5wYXJhbXMucmVmLnR5cGUgIT09ICdyZWYvcmVzb3VyY2UnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIENvbXBsZXRlUmVxdWVzdFJlc291cmNlVGVtcGxhdGUsIGJ1dCBnb3QgJHtyZXF1ZXN0LnBhcmFtcy5yZWYudHlwZX1gKTtcbiAgICB9XG4gICAgdm9pZCByZXF1ZXN0O1xufVxuLyoqXG4gKiBUaGUgc2VydmVyJ3MgcmVzcG9uc2UgdG8gYSBjb21wbGV0aW9uL2NvbXBsZXRlIHJlcXVlc3RcbiAqL1xuZXhwb3J0IGNvbnN0IENvbXBsZXRlUmVzdWx0U2NoZW1hID0gUmVzdWx0U2NoZW1hLmV4dGVuZCh7XG4gICAgY29tcGxldGlvbjogei5sb29zZU9iamVjdCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBhcnJheSBvZiBjb21wbGV0aW9uIHZhbHVlcy4gTXVzdCBub3QgZXhjZWVkIDEwMCBpdGVtcy5cbiAgICAgICAgICovXG4gICAgICAgIHZhbHVlczogei5hcnJheSh6LnN0cmluZygpKS5tYXgoMTAwKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgY29tcGxldGlvbiBvcHRpb25zIGF2YWlsYWJsZS4gVGhpcyBjYW4gZXhjZWVkIHRoZSBudW1iZXIgb2YgdmFsdWVzIGFjdHVhbGx5IHNlbnQgaW4gdGhlIHJlc3BvbnNlLlxuICAgICAgICAgKi9cbiAgICAgICAgdG90YWw6IHoub3B0aW9uYWwoei5udW1iZXIoKS5pbnQoKSksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGVyZSBhcmUgYWRkaXRpb25hbCBjb21wbGV0aW9uIG9wdGlvbnMgYmV5b25kIHRob3NlIHByb3ZpZGVkIGluIHRoZSBjdXJyZW50IHJlc3BvbnNlLCBldmVuIGlmIHRoZSBleGFjdCB0b3RhbCBpcyB1bmtub3duLlxuICAgICAgICAgKi9cbiAgICAgICAgaGFzTW9yZTogei5vcHRpb25hbCh6LmJvb2xlYW4oKSlcbiAgICB9KVxufSk7XG4vKiBSb290cyAqL1xuLyoqXG4gKiBSZXByZXNlbnRzIGEgcm9vdCBkaXJlY3Rvcnkgb3IgZmlsZSB0aGF0IHRoZSBzZXJ2ZXIgY2FuIG9wZXJhdGUgb24uXG4gKi9cbmV4cG9ydCBjb25zdCBSb290U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIC8qKlxuICAgICAqIFRoZSBVUkkgaWRlbnRpZnlpbmcgdGhlIHJvb3QuIFRoaXMgKm11c3QqIHN0YXJ0IHdpdGggZmlsZTovLyBmb3Igbm93LlxuICAgICAqL1xuICAgIHVyaTogei5zdHJpbmcoKS5zdGFydHNXaXRoKCdmaWxlOi8vJyksXG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgbmFtZSBmb3IgdGhlIHJvb3QuXG4gICAgICovXG4gICAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIC8qKlxuICAgICAqIFNlZSBbTUNQIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9tb2RlbGNvbnRleHRwcm90b2NvbC9tb2RlbGNvbnRleHRwcm90b2NvbC9ibG9iLzQ3MzM5YzAzYzE0M2JiNGVjMDFhMjZlNzIxYTFiOGZlNjY2MzRlYmUvZG9jcy9zcGVjaWZpY2F0aW9uL2RyYWZ0L2Jhc2ljL2luZGV4Lm1keCNnZW5lcmFsLWZpZWxkcylcbiAgICAgKiBmb3Igbm90ZXMgb24gX21ldGEgdXNhZ2UuXG4gICAgICovXG4gICAgX21ldGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpXG59KTtcbi8qKlxuICogU2VudCBmcm9tIHRoZSBzZXJ2ZXIgdG8gcmVxdWVzdCBhIGxpc3Qgb2Ygcm9vdCBVUklzIGZyb20gdGhlIGNsaWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IExpc3RSb290c1JlcXVlc3RTY2hlbWEgPSBSZXF1ZXN0U2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoJ3Jvb3RzL2xpc3QnKSxcbiAgICBwYXJhbXM6IEJhc2VSZXF1ZXN0UGFyYW1zU2NoZW1hLm9wdGlvbmFsKClcbn0pO1xuLyoqXG4gKiBUaGUgY2xpZW50J3MgcmVzcG9uc2UgdG8gYSByb290cy9saXN0IHJlcXVlc3QgZnJvbSB0aGUgc2VydmVyLlxuICovXG5leHBvcnQgY29uc3QgTGlzdFJvb3RzUmVzdWx0U2NoZW1hID0gUmVzdWx0U2NoZW1hLmV4dGVuZCh7XG4gICAgcm9vdHM6IHouYXJyYXkoUm9vdFNjaGVtYSlcbn0pO1xuLyoqXG4gKiBBIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlciwgaW5mb3JtaW5nIGl0IHRoYXQgdGhlIGxpc3Qgb2Ygcm9vdHMgaGFzIGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBSb290c0xpc3RDaGFuZ2VkTm90aWZpY2F0aW9uU2NoZW1hID0gTm90aWZpY2F0aW9uU2NoZW1hLmV4dGVuZCh7XG4gICAgbWV0aG9kOiB6LmxpdGVyYWwoJ25vdGlmaWNhdGlvbnMvcm9vdHMvbGlzdF9jaGFuZ2VkJyksXG4gICAgcGFyYW1zOiBOb3RpZmljYXRpb25zUGFyYW1zU2NoZW1hLm9wdGlvbmFsKClcbn0pO1xuLyogQ2xpZW50IG1lc3NhZ2VzICovXG5leHBvcnQgY29uc3QgQ2xpZW50UmVxdWVzdFNjaGVtYSA9IHoudW5pb24oW1xuICAgIFBpbmdSZXF1ZXN0U2NoZW1hLFxuICAgIEluaXRpYWxpemVSZXF1ZXN0U2NoZW1hLFxuICAgIENvbXBsZXRlUmVxdWVzdFNjaGVtYSxcbiAgICBTZXRMZXZlbFJlcXVlc3RTY2hlbWEsXG4gICAgR2V0UHJvbXB0UmVxdWVzdFNjaGVtYSxcbiAgICBMaXN0UHJvbXB0c1JlcXVlc3RTY2hlbWEsXG4gICAgTGlzdFJlc291cmNlc1JlcXVlc3RTY2hlbWEsXG4gICAgTGlzdFJlc291cmNlVGVtcGxhdGVzUmVxdWVzdFNjaGVtYSxcbiAgICBSZWFkUmVzb3VyY2VSZXF1ZXN0U2NoZW1hLFxuICAgIFN1YnNjcmliZVJlcXVlc3RTY2hlbWEsXG4gICAgVW5zdWJzY3JpYmVSZXF1ZXN0U2NoZW1hLFxuICAgIENhbGxUb29sUmVxdWVzdFNjaGVtYSxcbiAgICBMaXN0VG9vbHNSZXF1ZXN0U2NoZW1hLFxuICAgIEdldFRhc2tSZXF1ZXN0U2NoZW1hLFxuICAgIEdldFRhc2tQYXlsb2FkUmVxdWVzdFNjaGVtYSxcbiAgICBMaXN0VGFza3NSZXF1ZXN0U2NoZW1hLFxuICAgIENhbmNlbFRhc2tSZXF1ZXN0U2NoZW1hXG5dKTtcbmV4cG9ydCBjb25zdCBDbGllbnROb3RpZmljYXRpb25TY2hlbWEgPSB6LnVuaW9uKFtcbiAgICBDYW5jZWxsZWROb3RpZmljYXRpb25TY2hlbWEsXG4gICAgUHJvZ3Jlc3NOb3RpZmljYXRpb25TY2hlbWEsXG4gICAgSW5pdGlhbGl6ZWROb3RpZmljYXRpb25TY2hlbWEsXG4gICAgUm9vdHNMaXN0Q2hhbmdlZE5vdGlmaWNhdGlvblNjaGVtYSxcbiAgICBUYXNrU3RhdHVzTm90aWZpY2F0aW9uU2NoZW1hXG5dKTtcbmV4cG9ydCBjb25zdCBDbGllbnRSZXN1bHRTY2hlbWEgPSB6LnVuaW9uKFtcbiAgICBFbXB0eVJlc3VsdFNjaGVtYSxcbiAgICBDcmVhdGVNZXNzYWdlUmVzdWx0U2NoZW1hLFxuICAgIENyZWF0ZU1lc3NhZ2VSZXN1bHRXaXRoVG9vbHNTY2hlbWEsXG4gICAgRWxpY2l0UmVzdWx0U2NoZW1hLFxuICAgIExpc3RSb290c1Jlc3VsdFNjaGVtYSxcbiAgICBHZXRUYXNrUmVzdWx0U2NoZW1hLFxuICAgIExpc3RUYXNrc1Jlc3VsdFNjaGVtYSxcbiAgICBDcmVhdGVUYXNrUmVzdWx0U2NoZW1hXG5dKTtcbi8qIFNlcnZlciBtZXNzYWdlcyAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlclJlcXVlc3RTY2hlbWEgPSB6LnVuaW9uKFtcbiAgICBQaW5nUmVxdWVzdFNjaGVtYSxcbiAgICBDcmVhdGVNZXNzYWdlUmVxdWVzdFNjaGVtYSxcbiAgICBFbGljaXRSZXF1ZXN0U2NoZW1hLFxuICAgIExpc3RSb290c1JlcXVlc3RTY2hlbWEsXG4gICAgR2V0VGFza1JlcXVlc3RTY2hlbWEsXG4gICAgR2V0VGFza1BheWxvYWRSZXF1ZXN0U2NoZW1hLFxuICAgIExpc3RUYXNrc1JlcXVlc3RTY2hlbWEsXG4gICAgQ2FuY2VsVGFza1JlcXVlc3RTY2hlbWFcbl0pO1xuZXhwb3J0IGNvbnN0IFNlcnZlck5vdGlmaWNhdGlvblNjaGVtYSA9IHoudW5pb24oW1xuICAgIENhbmNlbGxlZE5vdGlmaWNhdGlvblNjaGVtYSxcbiAgICBQcm9ncmVzc05vdGlmaWNhdGlvblNjaGVtYSxcbiAgICBMb2dnaW5nTWVzc2FnZU5vdGlmaWNhdGlvblNjaGVtYSxcbiAgICBSZXNvdXJjZVVwZGF0ZWROb3RpZmljYXRpb25TY2hlbWEsXG4gICAgUmVzb3VyY2VMaXN0Q2hhbmdlZE5vdGlmaWNhdGlvblNjaGVtYSxcbiAgICBUb29sTGlzdENoYW5nZWROb3RpZmljYXRpb25TY2hlbWEsXG4gICAgUHJvbXB0TGlzdENoYW5nZWROb3RpZmljYXRpb25TY2hlbWEsXG4gICAgVGFza1N0YXR1c05vdGlmaWNhdGlvblNjaGVtYSxcbiAgICBFbGljaXRhdGlvbkNvbXBsZXRlTm90aWZpY2F0aW9uU2NoZW1hXG5dKTtcbmV4cG9ydCBjb25zdCBTZXJ2ZXJSZXN1bHRTY2hlbWEgPSB6LnVuaW9uKFtcbiAgICBFbXB0eVJlc3VsdFNjaGVtYSxcbiAgICBJbml0aWFsaXplUmVzdWx0U2NoZW1hLFxuICAgIENvbXBsZXRlUmVzdWx0U2NoZW1hLFxuICAgIEdldFByb21wdFJlc3VsdFNjaGVtYSxcbiAgICBMaXN0UHJvbXB0c1Jlc3VsdFNjaGVtYSxcbiAgICBMaXN0UmVzb3VyY2VzUmVzdWx0U2NoZW1hLFxuICAgIExpc3RSZXNvdXJjZVRlbXBsYXRlc1Jlc3VsdFNjaGVtYSxcbiAgICBSZWFkUmVzb3VyY2VSZXN1bHRTY2hlbWEsXG4gICAgQ2FsbFRvb2xSZXN1bHRTY2hlbWEsXG4gICAgTGlzdFRvb2xzUmVzdWx0U2NoZW1hLFxuICAgIEdldFRhc2tSZXN1bHRTY2hlbWEsXG4gICAgTGlzdFRhc2tzUmVzdWx0U2NoZW1hLFxuICAgIENyZWF0ZVRhc2tSZXN1bHRTY2hlbWFcbl0pO1xuZXhwb3J0IGNsYXNzIE1jcEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1lc3NhZ2UsIGRhdGEpIHtcbiAgICAgICAgc3VwZXIoYE1DUCBlcnJvciAke2NvZGV9OiAke21lc3NhZ2V9YCk7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMubmFtZSA9ICdNY3BFcnJvcic7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgdHlwZSBiYXNlZCBvbiB0aGUgZXJyb3IgY29kZSBhbmQgZGF0YVxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tRXJyb3IoY29kZSwgbWVzc2FnZSwgZGF0YSkge1xuICAgICAgICAvLyBDaGVjayBmb3Igc3BlY2lmaWMgZXJyb3IgdHlwZXNcbiAgICAgICAgaWYgKGNvZGUgPT09IEVycm9yQ29kZS5VcmxFbGljaXRhdGlvblJlcXVpcmVkICYmIGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yRGF0YSA9IGRhdGE7XG4gICAgICAgICAgICBpZiAoZXJyb3JEYXRhLmVsaWNpdGF0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVXJsRWxpY2l0YXRpb25SZXF1aXJlZEVycm9yKGVycm9yRGF0YS5lbGljaXRhdGlvbnMsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIERlZmF1bHQgdG8gZ2VuZXJpYyBNY3BFcnJvclxuICAgICAgICByZXR1cm4gbmV3IE1jcEVycm9yKGNvZGUsIG1lc3NhZ2UsIGRhdGEpO1xuICAgIH1cbn1cbi8qKlxuICogU3BlY2lhbGl6ZWQgZXJyb3IgdHlwZSB3aGVuIGEgdG9vbCByZXF1aXJlcyBhIFVSTCBtb2RlIGVsaWNpdGF0aW9uLlxuICogVGhpcyBtYWtlcyBpdCBuaWNlciBmb3IgdGhlIGNsaWVudCB0byBoYW5kbGUgc2luY2UgdGhlcmUgaXMgc3BlY2lmaWMgZGF0YSB0byB3b3JrIHdpdGggaW5zdGVhZCBvZiBqdXN0IGEgY29kZSB0byBjaGVjayBhZ2FpbnN0LlxuICovXG5leHBvcnQgY2xhc3MgVXJsRWxpY2l0YXRpb25SZXF1aXJlZEVycm9yIGV4dGVuZHMgTWNwRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGVsaWNpdGF0aW9ucywgbWVzc2FnZSA9IGBVUkwgZWxpY2l0YXRpb24ke2VsaWNpdGF0aW9ucy5sZW5ndGggPiAxID8gJ3MnIDogJyd9IHJlcXVpcmVkYCkge1xuICAgICAgICBzdXBlcihFcnJvckNvZGUuVXJsRWxpY2l0YXRpb25SZXF1aXJlZCwgbWVzc2FnZSwge1xuICAgICAgICAgICAgZWxpY2l0YXRpb25zOiBlbGljaXRhdGlvbnNcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBlbGljaXRhdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE/LmVsaWNpdGF0aW9ucyA/PyBbXTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js\n");
/***/ }),
/***/ "(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js":
/*!****************************************************************************************************************************************************!*\
!*** ./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js ***!
\****************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AjvJsonSchemaValidator: () => (/* binding */ AjvJsonSchemaValidator)\n/* harmony export */ });\n/* harmony import */ var ajv__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ajv */ \"(rsc)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/ajv.js\");\n/* harmony import */ var ajv_formats__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ajv-formats */ \"(rsc)/./node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/dist/index.js\");\n/**\n * AJV-based JSON Schema validator provider\n */\n\n\nfunction createDefaultAjvInstance() {\n const ajv = new ajv__WEBPACK_IMPORTED_MODULE_1__({\n strict: false,\n validateFormats: true,\n validateSchema: false,\n allErrors: true\n });\n const addFormats = ajv_formats__WEBPACK_IMPORTED_MODULE_0__;\n addFormats(ajv);\n return ajv;\n}\n/**\n * @example\n * ```typescript\n * // Use with default AJV instance (recommended)\n * import { AjvJsonSchemaValidator } from '@modelcontextprotocol/sdk/validation/ajv';\n * const validator = new AjvJsonSchemaValidator();\n *\n * // Use with custom AJV instance\n * import { Ajv } from 'ajv';\n * const ajv = new Ajv({ strict: true, allErrors: true });\n * const validator = new AjvJsonSchemaValidator(ajv);\n * ```\n */\nclass AjvJsonSchemaValidator {\n /**\n * Create an AJV validator\n *\n * @param ajv - Optional pre-configured AJV instance. If not provided, a default instance will be created.\n *\n * @example\n * ```typescript\n * // Use default configuration (recommended for most cases)\n * import { AjvJsonSchemaValidator } from '@modelcontextprotocol/sdk/validation/ajv';\n * const validator = new AjvJsonSchemaValidator();\n *\n * // Or provide custom AJV instance for advanced configuration\n * import { Ajv } from 'ajv';\n * import addFormats from 'ajv-formats';\n *\n * const ajv = new Ajv({ validateFormats: true });\n * addFormats(ajv);\n * const validator = new AjvJsonSchemaValidator(ajv);\n * ```\n */\n constructor(ajv) {\n this._ajv = ajv ?? createDefaultAjvInstance();\n }\n /**\n * Create a validator for the given JSON Schema\n *\n * The validator is compiled once and can be reused multiple times.\n * If the schema has an $id, it will be cached by AJV automatically.\n *\n * @param schema - Standard JSON Schema object\n * @returns A validator function that validates input data\n */\n getValidator(schema) {\n // Check if schema has $id and is already compiled/cached\n const ajvValidator = '$id' in schema && typeof schema.$id === 'string'\n ? (this._ajv.getSchema(schema.$id) ?? this._ajv.compile(schema))\n : this._ajv.compile(schema);\n return (input) => {\n const valid = ajvValidator(input);\n if (valid) {\n return {\n valid: true,\n data: input,\n errorMessage: undefined\n };\n }\n else {\n return {\n valid: false,\n data: undefined,\n errorMessage: this._ajv.errorsText(ajvValidator.errors)\n };\n }\n };\n }\n}\n//# sourceMappingURL=ajv-provider.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvLnBucG0vQG1vZGVsY29udGV4dHByb3RvY29sK3Nka0AxLjI5LjBfem9kQDMuMjUuNzYvbm9kZV9tb2R1bGVzL0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvZGlzdC9lc20vdmFsaWRhdGlvbi9hanYtcHJvdmlkZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ3NCO0FBQ2dCO0FBQ3RDO0FBQ0Esb0JBQW9CLGdDQUFHO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLHVCQUF1Qix3Q0FBVztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVkseUJBQXlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQix5QkFBeUIsK0JBQStCO0FBQ3hEO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBLDZCQUE2Qix1QkFBdUI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9kZWxjb250ZXh0cHJvdG9jb2wrc2RrQDEuMjkuMF96b2RAMy4yNS43Ni9ub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9kaXN0L2VzbS92YWxpZGF0aW9uL2Fqdi1wcm92aWRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFKVi1iYXNlZCBKU09OIFNjaGVtYSB2YWxpZGF0b3IgcHJvdmlkZXJcbiAqL1xuaW1wb3J0IEFqdiBmcm9tICdhanYnO1xuaW1wb3J0IF9hZGRGb3JtYXRzIGZyb20gJ2Fqdi1mb3JtYXRzJztcbmZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRBanZJbnN0YW5jZSgpIHtcbiAgICBjb25zdCBhanYgPSBuZXcgQWp2KHtcbiAgICAgICAgc3RyaWN0OiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGVGb3JtYXRzOiB0cnVlLFxuICAgICAgICB2YWxpZGF0ZVNjaGVtYTogZmFsc2UsXG4gICAgICAgIGFsbEVycm9yczogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IGFkZEZvcm1hdHMgPSBfYWRkRm9ybWF0cztcbiAgICBhZGRGb3JtYXRzKGFqdik7XG4gICAgcmV0dXJuIGFqdjtcbn1cbi8qKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFVzZSB3aXRoIGRlZmF1bHQgQUpWIGluc3RhbmNlIChyZWNvbW1lbmRlZClcbiAqIGltcG9ydCB7IEFqdkpzb25TY2hlbWFWYWxpZGF0b3IgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3ZhbGlkYXRpb24vYWp2JztcbiAqIGNvbnN0IHZhbGlkYXRvciA9IG5ldyBBanZKc29uU2NoZW1hVmFsaWRhdG9yKCk7XG4gKlxuICogLy8gVXNlIHdpdGggY3VzdG9tIEFKViBpbnN0YW5jZVxuICogaW1wb3J0IHsgQWp2IH0gZnJvbSAnYWp2JztcbiAqIGNvbnN0IGFqdiA9IG5ldyBBanYoeyBzdHJpY3Q6IHRydWUsIGFsbEVycm9yczogdHJ1ZSB9KTtcbiAqIGNvbnN0IHZhbGlkYXRvciA9IG5ldyBBanZKc29uU2NoZW1hVmFsaWRhdG9yKGFqdik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEFqdkpzb25TY2hlbWFWYWxpZGF0b3Ige1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBSlYgdmFsaWRhdG9yXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWp2IC0gT3B0aW9uYWwgcHJlLWNvbmZpZ3VyZWQgQUpWIGluc3RhbmNlLiBJZiBub3QgcHJvdmlkZWQsIGEgZGVmYXVsdCBpbnN0YW5jZSB3aWxsIGJlIGNyZWF0ZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBVc2UgZGVmYXVsdCBjb25maWd1cmF0aW9uIChyZWNvbW1lbmRlZCBmb3IgbW9zdCBjYXNlcylcbiAgICAgKiBpbXBvcnQgeyBBanZKc29uU2NoZW1hVmFsaWRhdG9yIH0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay92YWxpZGF0aW9uL2Fqdic7XG4gICAgICogY29uc3QgdmFsaWRhdG9yID0gbmV3IEFqdkpzb25TY2hlbWFWYWxpZGF0b3IoKTtcbiAgICAgKlxuICAgICAqIC8vIE9yIHByb3ZpZGUgY3VzdG9tIEFKViBpbnN0YW5jZSBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvblxuICAgICAqIGltcG9ydCB7IEFqdiB9IGZyb20gJ2Fqdic7XG4gICAgICogaW1wb3J0IGFkZEZvcm1hdHMgZnJvbSAnYWp2LWZvcm1hdHMnO1xuICAgICAqXG4gICAgICogY29uc3QgYWp2ID0gbmV3IEFqdih7IHZhbGlkYXRlRm9ybWF0czogdHJ1ZSB9KTtcbiAgICAgKiBhZGRGb3JtYXRzKGFqdik7XG4gICAgICogY29uc3QgdmFsaWRhdG9yID0gbmV3IEFqdkpzb25TY2hlbWFWYWxpZGF0b3IoYWp2KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihhanYpIHtcbiAgICAgICAgdGhpcy5fYWp2ID0gYWp2ID8/IGNyZWF0ZURlZmF1bHRBanZJbnN0YW5jZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB2YWxpZGF0b3IgZm9yIHRoZSBnaXZlbiBKU09OIFNjaGVtYVxuICAgICAqXG4gICAgICogVGhlIHZhbGlkYXRvciBpcyBjb21waWxlZCBvbmNlIGFuZCBjYW4gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICAgICAqIElmIHRoZSBzY2hlbWEgaGFzIGFuICRpZCwgaXQgd2lsbCBiZSBjYWNoZWQgYnkgQUpWIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2NoZW1hIC0gU3RhbmRhcmQgSlNPTiBTY2hlbWEgb2JqZWN0XG4gICAgICogQHJldHVybnMgQSB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCB2YWxpZGF0ZXMgaW5wdXQgZGF0YVxuICAgICAqL1xuICAgIGdldFZhbGlkYXRvcihzY2hlbWEpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgc2NoZW1hIGhhcyAkaWQgYW5kIGlzIGFscmVhZHkgY29tcGlsZWQvY2FjaGVkXG4gICAgICAgIGNvbnN0IGFqdlZhbGlkYXRvciA9ICckaWQnIGluIHNjaGVtYSAmJiB0eXBlb2Ygc2NoZW1hLiRpZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gKHRoaXMuX2Fqdi5nZXRTY2hlbWEoc2NoZW1hLiRpZCkgPz8gdGhpcy5fYWp2LmNvbXBpbGUoc2NoZW1hKSlcbiAgICAgICAgICAgIDogdGhpcy5fYWp2LmNvbXBpbGUoc2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIChpbnB1dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBhanZWYWxpZGF0b3IoaW5wdXQpO1xuICAgICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGlucHV0LFxuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiB0aGlzLl9hanYuZXJyb3JzVGV4dChhanZWYWxpZGF0b3IuZXJyb3JzKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWp2LXByb3ZpZGVyLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js\n");
/***/ })
};
;