next 15.2.0-canary.26 → 15.2.0-canary.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of next might be problematic. Click here for more details.
- package/dist/bin/next +1 -1
- package/dist/build/index.js +2 -2
- package/dist/build/swc/index.js +1 -1
- package/dist/build/webpack/plugins/eval-source-map-dev-tool-plugin.js +0 -1
- package/dist/build/webpack/plugins/eval-source-map-dev-tool-plugin.js.map +1 -1
- package/dist/build/webpack-config.js +2 -2
- package/dist/client/app-bootstrap.js +1 -1
- package/dist/client/index.js +1 -1
- package/dist/compiled/next-server/app-page-experimental.runtime.dev.js +9 -9
- package/dist/compiled/next-server/app-page-experimental.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/app-page.runtime.dev.js +9 -9
- package/dist/compiled/next-server/app-page.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/app-route-experimental.runtime.dev.js +3 -3
- package/dist/compiled/next-server/app-route-experimental.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/app-route.runtime.dev.js +3 -3
- package/dist/compiled/next-server/app-route.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/dist_client_dev_noop-turbopack-hmr_js-experimental.runtime.dev.js +1 -1
- package/dist/compiled/next-server/dist_client_dev_noop-turbopack-hmr_js-experimental.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/dist_client_dev_noop-turbopack-hmr_js.runtime.dev.js +1 -1
- package/dist/compiled/next-server/dist_client_dev_noop-turbopack-hmr_js.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages-api.runtime.dev.js +2 -2
- package/dist/compiled/next-server/pages-api.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages.runtime.dev.js +18 -18
- package/dist/compiled/next-server/pages.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages.runtime.prod.js +2 -2
- package/dist/compiled/next-server/pages.runtime.prod.js.map +1 -1
- package/dist/esm/build/index.js +2 -2
- package/dist/esm/build/swc/index.js +1 -1
- package/dist/esm/build/webpack/plugins/eval-source-map-dev-tool-plugin.js +0 -1
- package/dist/esm/build/webpack/plugins/eval-source-map-dev-tool-plugin.js.map +1 -1
- package/dist/esm/build/webpack-config.js +2 -2
- package/dist/esm/client/app-bootstrap.js +1 -1
- package/dist/esm/client/index.js +1 -1
- package/dist/esm/server/config.js +1 -1
- package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/esm/server/lib/app-info-log.js +1 -1
- package/dist/esm/server/lib/start-server.js +1 -1
- package/dist/server/config.js +1 -1
- package/dist/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/server/lib/app-info-log.js +1 -1
- package/dist/server/lib/start-server.js +1 -1
- package/dist/telemetry/anonymous-meta.js +1 -1
- package/dist/telemetry/events/session-stopped.js +2 -2
- package/dist/telemetry/events/version.js +2 -2
- package/package.json +16 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-route.runtime.dev.js","sources":["webpack://next/./dist/compiled/@edge-runtime/cookies/index.js","webpack://next/./dist/compiled/cookie/index.js","webpack://next/./dist/compiled/p-queue/index.js","webpack://next/./dist/compiled/react/cjs/react.development.js","webpack://next/./dist/compiled/react/index.js","webpack://next/./dist/compiled/string-hash/index.js","webpack://next/./dist/src/lib/picocolors.ts","webpack://next/./dist/src/server/route-modules/route-module.ts","webpack://next/./dist/src/client/components/app-router-headers.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/reflect.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/headers.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/request-cookies.ts","webpack://next/./dist/src/lib/constants.ts","webpack://next/./dist/src/server/lib/trace/constants.ts","webpack://next/./dist/src/server/api-utils/index.ts","webpack://next/./dist/src/server/async-storage/draft-mode-provider.ts","webpack://next/./dist/src/server/async-storage/request-store.ts","webpack://next/./dist/src/server/web/utils.ts","webpack://next/./dist/src/shared/lib/invariant-error.ts","webpack://next/./dist/src/server/after/revalidation-utils.ts","webpack://next/./dist/src/server/app-render/async-local-storage.ts","webpack://next/./dist/src/server/after/after-context.ts","webpack://next/./dist/src/shared/lib/is-thenable.ts","webpack://next/./dist/src/shared/lib/segment.ts","webpack://next/./dist/src/server/web/http.ts","webpack://next/./dist/src/server/lib/implicit-tags.ts","webpack://next/./dist/src/client/components/hooks-server-context.ts","webpack://next/./dist/src/client/components/static-generation-bailout.ts","webpack://next/./dist/src/server/dynamic-rendering-utils.ts","webpack://next/./dist/src/lib/scheduler.ts","webpack://next/./dist/src/server/app-render/dynamic-rendering.ts","webpack://next/./dist/src/server/lib/clone-response.ts","webpack://next/./dist/src/server/response-cache/types.ts","webpack://next/./dist/src/lib/detached-promise.ts","webpack://next/./dist/src/server/stream-utils/encodedTags.ts","webpack://next/./dist/src/server/stream-utils/uint8array-helpers.ts","webpack://next/./dist/src/server/stream-utils/node-web-streams-helper.ts","webpack://next/./dist/src/server/request-meta.ts","webpack://next/./dist/src/shared/lib/router/utils/remove-trailing-slash.ts","webpack://next/./dist/src/shared/lib/router/utils/parse-path.ts","webpack://next/./dist/src/shared/lib/router/utils/add-path-prefix.ts","webpack://next/./dist/src/shared/lib/router/utils/add-path-suffix.ts","webpack://next/./dist/src/shared/lib/router/utils/path-has-prefix.ts","webpack://next/./dist/src/shared/lib/i18n/normalize-locale-path.ts","webpack://next/./dist/src/server/web/next-url.ts","webpack://next/./dist/src/shared/lib/router/utils/get-next-pathname-info.ts","webpack://next/./dist/src/shared/lib/router/utils/remove-path-prefix.ts","webpack://next/./dist/src/shared/lib/get-hostname.ts","webpack://next/./dist/src/shared/lib/i18n/detect-domain-locale.ts","webpack://next/./dist/src/shared/lib/router/utils/format-next-pathname-info.ts","webpack://next/./dist/src/shared/lib/router/utils/add-locale.ts","webpack://next/./dist/src/server/web/spec-extension/request.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/next-request.ts","webpack://next/./dist/src/server/client-component-renderer-logger.ts","webpack://next/./dist/src/server/pipe-readable.ts","webpack://next/./dist/src/server/render-result.ts","webpack://next/./dist/src/server/lib/patch-fetch.ts","webpack://next/./dist/src/build/output/log.ts","webpack://next/./dist/src/server/lib/lru-cache.ts","webpack://next/./dist/src/server/route-modules/app-route/helpers/auto-implement-methods.ts","webpack://next/./dist/src/lib/format-server-error.ts","webpack://next/./dist/src/client/components/http-access-fallback/http-access-fallback.ts","webpack://next/./dist/src/client/components/redirect-status-code.ts","webpack://next/./dist/src/client/components/redirect-error.ts","webpack://next/./dist/src/server/app-render/prospective-render-utils.ts","webpack://next/./dist/src/server/app-render/create-error-handler.tsx","webpack://next/./dist/src/shared/lib/lazy-dynamic/bailout-to-csr.ts","webpack://next/./dist/src/client/components/is-next-router-error.ts","webpack://next/./dist/src/shared/lib/app-router-context.shared-runtime.ts","webpack://next/./dist/src/server/app-render/cache-signal.ts","webpack://next/./dist/src/server/request/utils.ts","webpack://next/./dist/src/server/create-deduped-by-callsite-server-error-logger.ts","webpack://next/./dist/src/server/request/params.ts","webpack://next/./dist/src/server/route-modules/app-route/module.ts","webpack://next/./dist/src/server/route-modules/app-route/helpers/is-static-gen-enabled.ts","webpack://next/./dist/src/server/lib/dedupe-fetch.ts","webpack://next/./dist/src/server/route-modules/app-route/helpers/parsed-url-query-to-params.ts","webpack://next/./dist/src/client/components/redirect.ts","webpack://next/./dist/src/server/lib/server-action-request-meta.ts","webpack://next/./dist/src/server/async-storage/work-store.ts","webpack://next/./dist/src/shared/lib/page-path/ensure-leading-slash.ts","webpack://next/./dist/src/shared/lib/router/utils/app-paths.ts","webpack://next/./dist/src/server/route-modules/app-route/helpers/get-pathname-from-absolute-path.ts","webpack://next/./dist/src/server/route-modules/app-route/helpers/clean-url.ts"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar src_exports = {};\n__export(src_exports, {\n RequestCookies: () => RequestCookies,\n ResponseCookies: () => ResponseCookies,\n parseCookie: () => parseCookie,\n parseSetCookie: () => parseSetCookie,\n stringifyCookie: () => stringifyCookie\n});\nmodule.exports = __toCommonJS(src_exports);\n\n// src/serialize.ts\nfunction stringifyCookie(c) {\n var _a;\n const attrs = [\n \"path\" in c && c.path && `Path=${c.path}`,\n \"expires\" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === \"number\" ? new Date(c.expires) : c.expires).toUTCString()}`,\n \"maxAge\" in c && typeof c.maxAge === \"number\" && `Max-Age=${c.maxAge}`,\n \"domain\" in c && c.domain && `Domain=${c.domain}`,\n \"secure\" in c && c.secure && \"Secure\",\n \"httpOnly\" in c && c.httpOnly && \"HttpOnly\",\n \"sameSite\" in c && c.sameSite && `SameSite=${c.sameSite}`,\n \"partitioned\" in c && c.partitioned && \"Partitioned\",\n \"priority\" in c && c.priority && `Priority=${c.priority}`\n ].filter(Boolean);\n const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : \"\")}`;\n return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join(\"; \")}`;\n}\nfunction parseCookie(cookie) {\n const map = /* @__PURE__ */ new Map();\n for (const pair of cookie.split(/; */)) {\n if (!pair)\n continue;\n const splitAt = pair.indexOf(\"=\");\n if (splitAt === -1) {\n map.set(pair, \"true\");\n continue;\n }\n const [key, value] = [pair.slice(0, splitAt), pair.slice(splitAt + 1)];\n try {\n map.set(key, decodeURIComponent(value != null ? value : \"true\"));\n } catch {\n }\n }\n return map;\n}\nfunction parseSetCookie(setCookie) {\n if (!setCookie) {\n return void 0;\n }\n const [[name, value], ...attributes] = parseCookie(setCookie);\n const {\n domain,\n expires,\n httponly,\n maxage,\n path,\n samesite,\n secure,\n partitioned,\n priority\n } = Object.fromEntries(\n attributes.map(([key, value2]) => [\n key.toLowerCase().replace(/-/g, \"\"),\n value2\n ])\n );\n const cookie = {\n name,\n value: decodeURIComponent(value),\n domain,\n ...expires && { expires: new Date(expires) },\n ...httponly && { httpOnly: true },\n ...typeof maxage === \"string\" && { maxAge: Number(maxage) },\n path,\n ...samesite && { sameSite: parseSameSite(samesite) },\n ...secure && { secure: true },\n ...priority && { priority: parsePriority(priority) },\n ...partitioned && { partitioned: true }\n };\n return compact(cookie);\n}\nfunction compact(t) {\n const newT = {};\n for (const key in t) {\n if (t[key]) {\n newT[key] = t[key];\n }\n }\n return newT;\n}\nvar SAME_SITE = [\"strict\", \"lax\", \"none\"];\nfunction parseSameSite(string) {\n string = string.toLowerCase();\n return SAME_SITE.includes(string) ? string : void 0;\n}\nvar PRIORITY = [\"low\", \"medium\", \"high\"];\nfunction parsePriority(string) {\n string = string.toLowerCase();\n return PRIORITY.includes(string) ? string : void 0;\n}\nfunction splitCookiesString(cookiesString) {\n if (!cookiesString)\n return [];\n var cookiesStrings = [];\n var pos = 0;\n var start;\n var ch;\n var lastComma;\n var nextStart;\n var cookiesSeparatorFound;\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1;\n }\n return pos < cookiesString.length;\n }\n function notSpecialChar() {\n ch = cookiesString.charAt(pos);\n return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n }\n while (pos < cookiesString.length) {\n start = pos;\n cookiesSeparatorFound = false;\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos);\n if (ch === \",\") {\n lastComma = pos;\n pos += 1;\n skipWhitespace();\n nextStart = pos;\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1;\n }\n if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n cookiesSeparatorFound = true;\n pos = nextStart;\n cookiesStrings.push(cookiesString.substring(start, lastComma));\n start = pos;\n } else {\n pos = lastComma + 1;\n }\n } else {\n pos += 1;\n }\n }\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length));\n }\n }\n return cookiesStrings;\n}\n\n// src/request-cookies.ts\nvar RequestCookies = class {\n constructor(requestHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n this._headers = requestHeaders;\n const header = requestHeaders.get(\"cookie\");\n if (header) {\n const parsed = parseCookie(header);\n for (const [name, value] of parsed) {\n this._parsed.set(name, { name, value });\n }\n }\n }\n [Symbol.iterator]() {\n return this._parsed[Symbol.iterator]();\n }\n /**\n * The amount of cookies received from the client\n */\n get size() {\n return this._parsed.size;\n }\n get(...args) {\n const name = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(name);\n }\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed);\n if (!args.length) {\n return all.map(([_, value]) => value);\n }\n const name = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter(([n]) => n === name).map(([_, value]) => value);\n }\n has(name) {\n return this._parsed.has(name);\n }\n set(...args) {\n const [name, value] = args.length === 1 ? [args[0].name, args[0].value] : args;\n const map = this._parsed;\n map.set(name, { name, value });\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value2]) => stringifyCookie(value2)).join(\"; \")\n );\n return this;\n }\n /**\n * Delete the cookies matching the passed name or names in the request.\n */\n delete(names) {\n const map = this._parsed;\n const result = !Array.isArray(names) ? map.delete(names) : names.map((name) => map.delete(name));\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value]) => stringifyCookie(value)).join(\"; \")\n );\n return result;\n }\n /**\n * Delete all the cookies in the cookies in the request.\n */\n clear() {\n this.delete(Array.from(this._parsed.keys()));\n return this;\n }\n /**\n * Format the cookies in the request as a string for logging\n */\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map((v) => `${v.name}=${encodeURIComponent(v.value)}`).join(\"; \");\n }\n};\n\n// src/response-cookies.ts\nvar ResponseCookies = class {\n constructor(responseHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n var _a, _b, _c;\n this._headers = responseHeaders;\n const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get(\"set-cookie\")) != null ? _c : [];\n const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie);\n for (const cookieString of cookieStrings) {\n const parsed = parseSetCookie(cookieString);\n if (parsed)\n this._parsed.set(parsed.name, parsed);\n }\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise.\n */\n get(...args) {\n const key = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(key);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise.\n */\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed.values());\n if (!args.length) {\n return all;\n }\n const key = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter((c) => c.name === key);\n }\n has(name) {\n return this._parsed.has(name);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise.\n */\n set(...args) {\n const [name, value, cookie] = args.length === 1 ? [args[0].name, args[0].value, args[0]] : args;\n const map = this._parsed;\n map.set(name, normalizeCookie({ name, value, ...cookie }));\n replace(map, this._headers);\n return this;\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise.\n */\n delete(...args) {\n const [name, options] = typeof args[0] === \"string\" ? [args[0]] : [args[0].name, args[0]];\n return this.set({ ...options, name, value: \"\", expires: /* @__PURE__ */ new Date(0) });\n }\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map(stringifyCookie).join(\"; \");\n }\n};\nfunction replace(bag, headers) {\n headers.delete(\"set-cookie\");\n for (const [, value] of bag) {\n const serialized = stringifyCookie(value);\n headers.append(\"set-cookie\", serialized);\n }\n}\nfunction normalizeCookie(cookie = { name: \"\", value: \"\" }) {\n if (typeof cookie.expires === \"number\") {\n cookie.expires = new Date(cookie.expires);\n }\n if (cookie.maxAge) {\n cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3);\n }\n if (cookie.path === null || cookie.path === void 0) {\n cookie.path = \"/\";\n }\n return cookie;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n RequestCookies,\n ResponseCookies,\n parseCookie,\n parseSetCookie,\n stringifyCookie\n});\n","(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */r.parse=parse;r.serialize=serialize;var i=decodeURIComponent;var t=encodeURIComponent;var a=/; */;var n=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function parse(e,r){if(typeof e!==\"string\"){throw new TypeError(\"argument str must be a string\")}var t={};var n=r||{};var o=e.split(a);var s=n.decode||i;for(var p=0;p<o.length;p++){var f=o[p];var u=f.indexOf(\"=\");if(u<0){continue}var v=f.substr(0,u).trim();var c=f.substr(++u,f.length).trim();if('\"'==c[0]){c=c.slice(1,-1)}if(undefined==t[v]){t[v]=tryDecode(c,s)}}return t}function serialize(e,r,i){var a=i||{};var o=a.encode||t;if(typeof o!==\"function\"){throw new TypeError(\"option encode is invalid\")}if(!n.test(e)){throw new TypeError(\"argument name is invalid\")}var s=o(r);if(s&&!n.test(s)){throw new TypeError(\"argument val is invalid\")}var p=e+\"=\"+s;if(null!=a.maxAge){var f=a.maxAge-0;if(isNaN(f)||!isFinite(f)){throw new TypeError(\"option maxAge is invalid\")}p+=\"; Max-Age=\"+Math.floor(f)}if(a.domain){if(!n.test(a.domain)){throw new TypeError(\"option domain is invalid\")}p+=\"; Domain=\"+a.domain}if(a.path){if(!n.test(a.path)){throw new TypeError(\"option path is invalid\")}p+=\"; Path=\"+a.path}if(a.expires){if(typeof a.expires.toUTCString!==\"function\"){throw new TypeError(\"option expires is invalid\")}p+=\"; Expires=\"+a.expires.toUTCString()}if(a.httpOnly){p+=\"; HttpOnly\"}if(a.secure){p+=\"; Secure\"}if(a.sameSite){var u=typeof a.sameSite===\"string\"?a.sameSite.toLowerCase():a.sameSite;switch(u){case true:p+=\"; SameSite=Strict\";break;case\"lax\":p+=\"; SameSite=Lax\";break;case\"strict\":p+=\"; SameSite=Strict\";break;case\"none\":p+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}}return p}function tryDecode(e,r){try{return r(e)}catch(r){return e}}})();module.exports=e})();","(()=>{\"use strict\";var e={993:e=>{var t=Object.prototype.hasOwnProperty,n=\"~\";function Events(){}if(Object.create){Events.prototype=Object.create(null);if(!(new Events).__proto__)n=false}function EE(e,t,n){this.fn=e;this.context=t;this.once=n||false}function addListener(e,t,r,i,s){if(typeof r!==\"function\"){throw new TypeError(\"The listener must be a function\")}var o=new EE(r,i||e,s),u=n?n+t:t;if(!e._events[u])e._events[u]=o,e._eventsCount++;else if(!e._events[u].fn)e._events[u].push(o);else e._events[u]=[e._events[u],o];return e}function clearEvent(e,t){if(--e._eventsCount===0)e._events=new Events;else delete e._events[t]}function EventEmitter(){this._events=new Events;this._eventsCount=0}EventEmitter.prototype.eventNames=function eventNames(){var e=[],r,i;if(this._eventsCount===0)return e;for(i in r=this._events){if(t.call(r,i))e.push(n?i.slice(1):i)}if(Object.getOwnPropertySymbols){return e.concat(Object.getOwnPropertySymbols(r))}return e};EventEmitter.prototype.listeners=function listeners(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,s=r.length,o=new Array(s);i<s;i++){o[i]=r[i].fn}return o};EventEmitter.prototype.listenerCount=function listenerCount(e){var t=n?n+e:e,r=this._events[t];if(!r)return 0;if(r.fn)return 1;return r.length};EventEmitter.prototype.emit=function emit(e,t,r,i,s,o){var u=n?n+e:e;if(!this._events[u])return false;var a=this._events[u],l=arguments.length,c,h;if(a.fn){if(a.once)this.removeListener(e,a.fn,undefined,true);switch(l){case 1:return a.fn.call(a.context),true;case 2:return a.fn.call(a.context,t),true;case 3:return a.fn.call(a.context,t,r),true;case 4:return a.fn.call(a.context,t,r,i),true;case 5:return a.fn.call(a.context,t,r,i,s),true;case 6:return a.fn.call(a.context,t,r,i,s,o),true}for(h=1,c=new Array(l-1);h<l;h++){c[h-1]=arguments[h]}a.fn.apply(a.context,c)}else{var _=a.length,f;for(h=0;h<_;h++){if(a[h].once)this.removeListener(e,a[h].fn,undefined,true);switch(l){case 1:a[h].fn.call(a[h].context);break;case 2:a[h].fn.call(a[h].context,t);break;case 3:a[h].fn.call(a[h].context,t,r);break;case 4:a[h].fn.call(a[h].context,t,r,i);break;default:if(!c)for(f=1,c=new Array(l-1);f<l;f++){c[f-1]=arguments[f]}a[h].fn.apply(a[h].context,c)}}}return true};EventEmitter.prototype.on=function on(e,t,n){return addListener(this,e,t,n,false)};EventEmitter.prototype.once=function once(e,t,n){return addListener(this,e,t,n,true)};EventEmitter.prototype.removeListener=function removeListener(e,t,r,i){var s=n?n+e:e;if(!this._events[s])return this;if(!t){clearEvent(this,s);return this}var o=this._events[s];if(o.fn){if(o.fn===t&&(!i||o.once)&&(!r||o.context===r)){clearEvent(this,s)}}else{for(var u=0,a=[],l=o.length;u<l;u++){if(o[u].fn!==t||i&&!o[u].once||r&&o[u].context!==r){a.push(o[u])}}if(a.length)this._events[s]=a.length===1?a[0]:a;else clearEvent(this,s)}return this};EventEmitter.prototype.removeAllListeners=function removeAllListeners(e){var t;if(e){t=n?n+e:e;if(this._events[t])clearEvent(this,t)}else{this._events=new Events;this._eventsCount=0}return this};EventEmitter.prototype.off=EventEmitter.prototype.removeListener;EventEmitter.prototype.addListener=EventEmitter.prototype.on;EventEmitter.prefixed=n;EventEmitter.EventEmitter=EventEmitter;if(true){e.exports=EventEmitter}},213:e=>{e.exports=(e,t)=>{t=t||(()=>{});return e.then((e=>new Promise((e=>{e(t())})).then((()=>e))),(e=>new Promise((e=>{e(t())})).then((()=>{throw e}))))}},574:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});function lowerBound(e,t,n){let r=0;let i=e.length;while(i>0){const s=i/2|0;let o=r+s;if(n(e[o],t)<=0){r=++o;i-=s+1}else{i=s}}return r}t[\"default\"]=lowerBound},821:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:true});const r=n(574);class PriorityQueue{constructor(){this._queue=[]}enqueue(e,t){t=Object.assign({priority:0},t);const n={priority:t.priority,run:e};if(this.size&&this._queue[this.size-1].priority>=t.priority){this._queue.push(n);return}const i=r.default(this._queue,n,((e,t)=>t.priority-e.priority));this._queue.splice(i,0,n)}dequeue(){const e=this._queue.shift();return e===null||e===void 0?void 0:e.run}filter(e){return this._queue.filter((t=>t.priority===e.priority)).map((e=>e.run))}get size(){return this._queue.length}}t[\"default\"]=PriorityQueue},816:(e,t,n)=>{const r=n(213);class TimeoutError extends Error{constructor(e){super(e);this.name=\"TimeoutError\"}}const pTimeout=(e,t,n)=>new Promise(((i,s)=>{if(typeof t!==\"number\"||t<0){throw new TypeError(\"Expected `milliseconds` to be a positive number\")}if(t===Infinity){i(e);return}const o=setTimeout((()=>{if(typeof n===\"function\"){try{i(n())}catch(e){s(e)}return}const r=typeof n===\"string\"?n:`Promise timed out after ${t} milliseconds`;const o=n instanceof Error?n:new TimeoutError(r);if(typeof e.cancel===\"function\"){e.cancel()}s(o)}),t);r(e.then(i,s),(()=>{clearTimeout(o)}))}));e.exports=pTimeout;e.exports[\"default\"]=pTimeout;e.exports.TimeoutError=TimeoutError}};var t={};function __nccwpck_require__(n){var r=t[n];if(r!==undefined){return r.exports}var i=t[n]={exports:{}};var s=true;try{e[n](i,i.exports,__nccwpck_require__);s=false}finally{if(s)delete t[n]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var n={};(()=>{var e=n;Object.defineProperty(e,\"__esModule\",{value:true});const t=__nccwpck_require__(993);const r=__nccwpck_require__(816);const i=__nccwpck_require__(821);const empty=()=>{};const s=new r.TimeoutError;class PQueue extends t{constructor(e){var t,n,r,s;super();this._intervalCount=0;this._intervalEnd=0;this._pendingCount=0;this._resolveEmpty=empty;this._resolveIdle=empty;e=Object.assign({carryoverConcurrencyCount:false,intervalCap:Infinity,interval:0,concurrency:Infinity,autoStart:true,queueClass:i.default},e);if(!(typeof e.intervalCap===\"number\"&&e.intervalCap>=1)){throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${(n=(t=e.intervalCap)===null||t===void 0?void 0:t.toString())!==null&&n!==void 0?n:\"\"}\\` (${typeof e.intervalCap})`)}if(e.interval===undefined||!(Number.isFinite(e.interval)&&e.interval>=0)){throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${(s=(r=e.interval)===null||r===void 0?void 0:r.toString())!==null&&s!==void 0?s:\"\"}\\` (${typeof e.interval})`)}this._carryoverConcurrencyCount=e.carryoverConcurrencyCount;this._isIntervalIgnored=e.intervalCap===Infinity||e.interval===0;this._intervalCap=e.intervalCap;this._interval=e.interval;this._queue=new e.queueClass;this._queueClass=e.queueClass;this.concurrency=e.concurrency;this._timeout=e.timeout;this._throwOnTimeout=e.throwOnTimeout===true;this._isPaused=e.autoStart===false}get _doesIntervalAllowAnother(){return this._isIntervalIgnored||this._intervalCount<this._intervalCap}get _doesConcurrentAllowAnother(){return this._pendingCount<this._concurrency}_next(){this._pendingCount--;this._tryToStartAnother();this.emit(\"next\")}_resolvePromises(){this._resolveEmpty();this._resolveEmpty=empty;if(this._pendingCount===0){this._resolveIdle();this._resolveIdle=empty;this.emit(\"idle\")}}_onResumeInterval(){this._onInterval();this._initializeIntervalIfNeeded();this._timeoutId=undefined}_isIntervalPaused(){const e=Date.now();if(this._intervalId===undefined){const t=this._intervalEnd-e;if(t<0){this._intervalCount=this._carryoverConcurrencyCount?this._pendingCount:0}else{if(this._timeoutId===undefined){this._timeoutId=setTimeout((()=>{this._onResumeInterval()}),t)}return true}}return false}_tryToStartAnother(){if(this._queue.size===0){if(this._intervalId){clearInterval(this._intervalId)}this._intervalId=undefined;this._resolvePromises();return false}if(!this._isPaused){const e=!this._isIntervalPaused();if(this._doesIntervalAllowAnother&&this._doesConcurrentAllowAnother){const t=this._queue.dequeue();if(!t){return false}this.emit(\"active\");t();if(e){this._initializeIntervalIfNeeded()}return true}}return false}_initializeIntervalIfNeeded(){if(this._isIntervalIgnored||this._intervalId!==undefined){return}this._intervalId=setInterval((()=>{this._onInterval()}),this._interval);this._intervalEnd=Date.now()+this._interval}_onInterval(){if(this._intervalCount===0&&this._pendingCount===0&&this._intervalId){clearInterval(this._intervalId);this._intervalId=undefined}this._intervalCount=this._carryoverConcurrencyCount?this._pendingCount:0;this._processQueue()}_processQueue(){while(this._tryToStartAnother()){}}get concurrency(){return this._concurrency}set concurrency(e){if(!(typeof e===\"number\"&&e>=1)){throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${e}\\` (${typeof e})`)}this._concurrency=e;this._processQueue()}async add(e,t={}){return new Promise(((n,i)=>{const run=async()=>{this._pendingCount++;this._intervalCount++;try{const o=this._timeout===undefined&&t.timeout===undefined?e():r.default(Promise.resolve(e()),t.timeout===undefined?this._timeout:t.timeout,(()=>{if(t.throwOnTimeout===undefined?this._throwOnTimeout:t.throwOnTimeout){i(s)}return undefined}));n(await o)}catch(e){i(e)}this._next()};this._queue.enqueue(run,t);this._tryToStartAnother();this.emit(\"add\")}))}async addAll(e,t){return Promise.all(e.map((async e=>this.add(e,t))))}start(){if(!this._isPaused){return this}this._isPaused=false;this._processQueue();return this}pause(){this._isPaused=true}clear(){this._queue=new this._queueClass}async onEmpty(){if(this._queue.size===0){return}return new Promise((e=>{const t=this._resolveEmpty;this._resolveEmpty=()=>{t();e()}}))}async onIdle(){if(this._pendingCount===0&&this._queue.size===0){return}return new Promise((e=>{const t=this._resolveIdle;this._resolveIdle=()=>{t();e()}}))}get size(){return this._queue.size}sizeBy(e){return this._queue.filter(e).length}get pending(){return this._pendingCount}get isPaused(){return this._isPaused}get timeout(){return this._timeout}set timeout(e){this._timeout=e}}e[\"default\"]=PQueue})();module.exports=n})();","/**\n * @license React\n * react.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function defineDeprecationWarning(methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n console.warn(\n \"%s(...) is deprecated in plain JavaScript React classes. %s\",\n info[0],\n info[1]\n );\n }\n });\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function warnNoop(publicInstance, callerName) {\n publicInstance =\n ((publicInstance = publicInstance.constructor) &&\n (publicInstance.displayName || publicInstance.name)) ||\n \"ReactClass\";\n var warningKey = publicInstance + \".\" + callerName;\n didWarnStateUpdateForUnmountedComponent[warningKey] ||\n (console.error(\n \"Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.\",\n callerName,\n publicInstance\n ),\n (didWarnStateUpdateForUnmountedComponent[warningKey] = !0));\n }\n function Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function ComponentDummy() {}\n function PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE$2\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function isValidElementType(type) {\n return \"string\" === typeof type ||\n \"function\" === typeof type ||\n type === REACT_FRAGMENT_TYPE ||\n type === REACT_PROFILER_TYPE ||\n type === REACT_STRICT_MODE_TYPE ||\n type === REACT_SUSPENSE_TYPE ||\n type === REACT_SUSPENSE_LIST_TYPE ||\n type === REACT_OFFSCREEN_TYPE ||\n (\"object\" === typeof type &&\n null !== type &&\n (type.$$typeof === REACT_LAZY_TYPE ||\n type.$$typeof === REACT_MEMO_TYPE ||\n type.$$typeof === REACT_CONTEXT_TYPE ||\n type.$$typeof === REACT_CONSUMER_TYPE ||\n type.$$typeof === REACT_FORWARD_REF_TYPE ||\n type.$$typeof === REACT_CLIENT_REFERENCE$1 ||\n void 0 !== type.getModuleId))\n ? !0\n : !1;\n }\n function disabledLog() {}\n function disableLogs() {\n if (0 === disabledDepth) {\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd;\n var props = {\n configurable: !0,\n enumerable: !0,\n value: disabledLog,\n writable: !0\n };\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n }\n disabledDepth++;\n }\n function reenableLogs() {\n disabledDepth--;\n if (0 === disabledDepth) {\n var props = { configurable: !0, enumerable: !0, writable: !0 };\n Object.defineProperties(console, {\n log: assign({}, props, { value: prevLog }),\n info: assign({}, props, { value: prevInfo }),\n warn: assign({}, props, { value: prevWarn }),\n error: assign({}, props, { value: prevError }),\n group: assign({}, props, { value: prevGroup }),\n groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),\n groupEnd: assign({}, props, { value: prevGroupEnd })\n });\n }\n 0 > disabledDepth &&\n console.error(\n \"disabledDepth fell below zero. This is a bug in React. Please file an issue.\"\n );\n }\n function describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" (<anonymous>)\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n }\n function describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n var frame = componentFrameCache.get(fn);\n if (void 0 !== frame) return frame;\n reentry = !0;\n frame = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n var previousDispatcher = null;\n previousDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = null;\n disableLogs();\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$0) {\n control = x$0;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$1) {\n control = x$1;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter =\n RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n _RunInRootFrame$Deter = namePropDescriptor = 0;\n namePropDescriptor < sampleLines.length &&\n !sampleLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n for (\n ;\n _RunInRootFrame$Deter < controlLines.length &&\n !controlLines[_RunInRootFrame$Deter].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n _RunInRootFrame$Deter++;\n if (\n namePropDescriptor === sampleLines.length ||\n _RunInRootFrame$Deter === controlLines.length\n )\n for (\n namePropDescriptor = sampleLines.length - 1,\n _RunInRootFrame$Deter = controlLines.length - 1;\n 1 <= namePropDescriptor &&\n 0 <= _RunInRootFrame$Deter &&\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter];\n\n )\n _RunInRootFrame$Deter--;\n for (\n ;\n 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;\n namePropDescriptor--, _RunInRootFrame$Deter--\n )\n if (\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter]\n ) {\n if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {\n do\n if (\n (namePropDescriptor--,\n _RunInRootFrame$Deter--,\n 0 > _RunInRootFrame$Deter ||\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter])\n ) {\n var _frame =\n \"\\n\" +\n sampleLines[namePropDescriptor].replace(\n \" at new \",\n \" at \"\n );\n fn.displayName &&\n _frame.includes(\"<anonymous>\") &&\n (_frame = _frame.replace(\"<anonymous>\", fn.displayName));\n \"function\" === typeof fn &&\n componentFrameCache.set(fn, _frame);\n return _frame;\n }\n while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);\n }\n break;\n }\n }\n } finally {\n (reentry = !1),\n (ReactSharedInternals.H = previousDispatcher),\n reenableLogs(),\n (Error.prepareStackTrace = frame);\n }\n sampleLines = (sampleLines = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(sampleLines)\n : \"\";\n \"function\" === typeof fn && componentFrameCache.set(fn, sampleLines);\n return sampleLines;\n }\n function describeUnknownElementTypeFrameInDEV(type) {\n if (null == type) return \"\";\n if (\"function\" === typeof type) {\n var prototype = type.prototype;\n return describeNativeComponentFrame(\n type,\n !(!prototype || !prototype.isReactComponent)\n );\n }\n if (\"string\" === typeof type) return describeBuiltInComponentFrame(type);\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame(\"Suspense\");\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeNativeComponentFrame(type.render, !1);\n case REACT_MEMO_TYPE:\n return describeUnknownElementTypeFrameInDEV(type.type);\n case REACT_LAZY_TYPE:\n prototype = type._payload;\n type = type._init;\n try {\n return describeUnknownElementTypeFrameInDEV(type(prototype));\n } catch (x) {}\n }\n return \"\";\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, self, source, owner, props) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function cloneAndReplaceKey(oldElement, newKey) {\n newKey = ReactElement(\n oldElement.type,\n newKey,\n void 0,\n void 0,\n oldElement._owner,\n oldElement.props\n );\n newKey._store.validated = oldElement._store.validated;\n return newKey;\n }\n function validateChildKeys(node, parentType) {\n if (\n \"object\" === typeof node &&\n node &&\n node.$$typeof !== REACT_CLIENT_REFERENCE\n )\n if (isArrayImpl(node))\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n isValidElement(child) && validateExplicitKey(child, parentType);\n }\n else if (isValidElement(node))\n node._store && (node._store.validated = 1);\n else if (\n ((i = getIteratorFn(node)),\n \"function\" === typeof i &&\n i !== node.entries &&\n ((i = i.call(node)), i !== node))\n )\n for (; !(node = i.next()).done; )\n isValidElement(node.value) &&\n validateExplicitKey(node.value, parentType);\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n function validateExplicitKey(element, parentType) {\n if (\n element._store &&\n !element._store.validated &&\n null == element.key &&\n ((element._store.validated = 1),\n (parentType = getCurrentComponentErrorInfo(parentType)),\n !ownerHasKeyUseWarning[parentType])\n ) {\n ownerHasKeyUseWarning[parentType] = !0;\n var childOwner = \"\";\n element &&\n null != element._owner &&\n element._owner !== getOwner() &&\n ((childOwner = null),\n \"number\" === typeof element._owner.tag\n ? (childOwner = getComponentNameFromType(element._owner.type))\n : \"string\" === typeof element._owner.name &&\n (childOwner = element._owner.name),\n (childOwner = \" It was passed a child from \" + childOwner + \".\"));\n var prevGetCurrentStack = ReactSharedInternals.getCurrentStack;\n ReactSharedInternals.getCurrentStack = function () {\n var stack = describeUnknownElementTypeFrameInDEV(element.type);\n prevGetCurrentStack && (stack += prevGetCurrentStack() || \"\");\n return stack;\n };\n console.error(\n 'Each child in a list should have a unique \"key\" prop.%s%s See https://react.dev/link/warning-keys for more information.',\n parentType,\n childOwner\n );\n ReactSharedInternals.getCurrentStack = prevGetCurrentStack;\n }\n }\n function getCurrentComponentErrorInfo(parentType) {\n var info = \"\",\n owner = getOwner();\n owner &&\n (owner = getComponentNameFromType(owner.type)) &&\n (info = \"\\n\\nCheck the render method of `\" + owner + \"`.\");\n info ||\n ((parentType = getComponentNameFromType(parentType)) &&\n (info =\n \"\\n\\nCheck the top-level render call using <\" + parentType + \">.\"));\n return info;\n }\n function escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n }\n function getElementKey(element, index) {\n return \"object\" === typeof element &&\n null !== element &&\n null != element.key\n ? (checkKeyStringCoercion(element.key), escape(\"\" + element.key))\n : index.toString(36);\n }\n function noop$1() {}\n function resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop$1, noop$1)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"),\n (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n }\n function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback) {\n invokeCallback = children;\n callback = callback(invokeCallback);\n var childKey =\n \"\" === nameSoFar ? \".\" + getElementKey(invokeCallback, 0) : nameSoFar;\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != childKey &&\n (escapedPrefix =\n childKey.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (null != callback.key &&\n ((invokeCallback && invokeCallback.key === callback.key) ||\n checkKeyStringCoercion(callback.key)),\n (escapedPrefix = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (invokeCallback && invokeCallback.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n childKey\n )),\n \"\" !== nameSoFar &&\n null != invokeCallback &&\n isValidElement(invokeCallback) &&\n null == invokeCallback.key &&\n invokeCallback._store &&\n !invokeCallback._store.validated &&\n (escapedPrefix._store.validated = 2),\n (callback = escapedPrefix)),\n array.push(callback));\n return 1;\n }\n invokeCallback = 0;\n childKey = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = childKey + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n i === children.entries &&\n (didWarnAboutMaps ||\n console.warn(\n \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n ),\n (didWarnAboutMaps = !0)),\n children = i.call(children),\n i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = childKey + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n }\n function mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n }\n function lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status &&\n ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status)\n return (\n (ctor = payload._result),\n void 0 === ctor &&\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\\n\\nDid you accidentally put curly braces around the import?\",\n ctor\n ),\n \"default\" in ctor ||\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\",\n ctor\n ),\n ctor.default\n );\n throw payload._result;\n }\n function resolveDispatcher() {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher;\n }\n function noop() {}\n function enqueueTask(task) {\n if (null === enqueueTaskImpl)\n try {\n var requireString = (\"require\" + Math.random()).slice(0, 7);\n enqueueTaskImpl = (module && module[requireString]).call(\n module,\n \"timers\"\n ).setImmediate;\n } catch (_err) {\n enqueueTaskImpl = function (callback) {\n !1 === didWarnAboutMessageChannel &&\n ((didWarnAboutMessageChannel = !0),\n \"undefined\" === typeof MessageChannel &&\n console.error(\n \"This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning.\"\n ));\n var channel = new MessageChannel();\n channel.port1.onmessage = callback;\n channel.port2.postMessage(void 0);\n };\n }\n return enqueueTaskImpl(task);\n }\n function aggregateErrors(errors) {\n return 1 < errors.length && \"function\" === typeof AggregateError\n ? new AggregateError(errors)\n : errors[0];\n }\n function popActScope(prevActQueue, prevActScopeDepth) {\n prevActScopeDepth !== actScopeDepth - 1 &&\n console.error(\n \"You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. \"\n );\n actScopeDepth = prevActScopeDepth;\n }\n function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {\n var queue = ReactSharedInternals.actQueue;\n if (null !== queue)\n if (0 !== queue.length)\n try {\n flushActQueue(queue);\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n });\n return;\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n else ReactSharedInternals.actQueue = null;\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((queue = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(queue))\n : resolve(returnValue);\n }\n function flushActQueue(queue) {\n if (!isFlushing) {\n isFlushing = !0;\n var i = 0;\n try {\n for (; i < queue.length; i++) {\n var callback = queue[i];\n do {\n ReactSharedInternals.didUsePromise = !1;\n var continuation = callback(!1);\n if (null !== continuation) {\n if (ReactSharedInternals.didUsePromise) {\n queue[i] = callback;\n queue.splice(0, i);\n return;\n }\n callback = continuation;\n } else break;\n } while (1);\n }\n queue.length = 0;\n } catch (error) {\n queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error);\n } finally {\n isFlushing = !1;\n }\n }\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_OFFSCREEN_TYPE = Symbol.for(\"react.offscreen\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n didWarnStateUpdateForUnmountedComponent = {},\n ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function (publicInstance) {\n warnNoop(publicInstance, \"forceUpdate\");\n },\n enqueueReplaceState: function (publicInstance) {\n warnNoop(publicInstance, \"replaceState\");\n },\n enqueueSetState: function (publicInstance) {\n warnNoop(publicInstance, \"setState\");\n }\n },\n assign = Object.assign,\n emptyObject = {};\n Object.freeze(emptyObject);\n Component.prototype.isReactComponent = {};\n Component.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n };\n Component.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n };\n var deprecatedAPIs = {\n isMounted: [\n \"isMounted\",\n \"Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks.\"\n ],\n replaceState: [\n \"replaceState\",\n \"Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236).\"\n ]\n },\n fnName;\n for (fnName in deprecatedAPIs)\n deprecatedAPIs.hasOwnProperty(fnName) &&\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n ComponentDummy.prototype = Component.prototype;\n deprecatedAPIs = PureComponent.prototype = new ComponentDummy();\n deprecatedAPIs.constructor = PureComponent;\n assign(deprecatedAPIs, Component.prototype);\n deprecatedAPIs.isPureReactComponent = !0;\n var isArrayImpl = Array.isArray,\n REACT_CLIENT_REFERENCE$2 = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals = {\n H: null,\n A: null,\n T: null,\n S: null,\n V: null,\n actQueue: null,\n isBatchingLegacy: !1,\n didScheduleLegacyUpdate: !1,\n didUsePromise: !1,\n thrownErrors: [],\n getCurrentStack: null\n },\n hasOwnProperty = Object.prototype.hasOwnProperty,\n REACT_CLIENT_REFERENCE$1 = Symbol.for(\"react.client.reference\"),\n disabledDepth = 0,\n prevLog,\n prevInfo,\n prevWarn,\n prevError,\n prevGroup,\n prevGroupCollapsed,\n prevGroupEnd;\n disabledLog.__reactDisabledLog = !0;\n var prefix,\n suffix,\n reentry = !1;\n var componentFrameCache = new (\n \"function\" === typeof WeakMap ? WeakMap : Map\n )();\n var REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n specialPropKeyWarningShown,\n didWarnAboutOldJSXRuntime;\n var didWarnAboutElementRef = {};\n var ownerHasKeyUseWarning = {},\n didWarnAboutMaps = !1,\n userProvidedKeyEscapeRegex = /\\/+/g,\n reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n didWarnAboutMessageChannel = !1,\n enqueueTaskImpl = null,\n actScopeDepth = 0,\n didWarnNoAwaitAct = !1,\n isFlushing = !1,\n queueSeveralMicrotasks =\n \"function\" === typeof queueMicrotask\n ? function (callback) {\n queueMicrotask(function () {\n return queueMicrotask(callback);\n });\n }\n : enqueueTask;\n deprecatedAPIs = Object.freeze({\n __proto__: null,\n c: function (size) {\n return resolveDispatcher().useMemoCache(size);\n }\n });\n exports.Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\n exports.Component = Component;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.PureComponent = PureComponent;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\n exports.__COMPILER_RUNTIME = deprecatedAPIs;\n exports.act = function (callback) {\n var prevActQueue = ReactSharedInternals.actQueue,\n prevActScopeDepth = actScopeDepth;\n actScopeDepth++;\n var queue = (ReactSharedInternals.actQueue =\n null !== prevActQueue ? prevActQueue : []),\n didAwaitActCall = !1;\n try {\n var result = callback();\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n (popActScope(prevActQueue, prevActScopeDepth),\n (callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n if (\n null !== result &&\n \"object\" === typeof result &&\n \"function\" === typeof result.then\n ) {\n var thenable = result;\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);\"\n ));\n });\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n thenable.then(\n function (returnValue) {\n popActScope(prevActQueue, prevActScopeDepth);\n if (0 === prevActScopeDepth) {\n try {\n flushActQueue(queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue,\n resolve,\n reject\n );\n });\n } catch (error$2) {\n ReactSharedInternals.thrownErrors.push(error$2);\n }\n if (0 < ReactSharedInternals.thrownErrors.length) {\n var _thrownError = aggregateErrors(\n ReactSharedInternals.thrownErrors\n );\n ReactSharedInternals.thrownErrors.length = 0;\n reject(_thrownError);\n }\n } else resolve(returnValue);\n },\n function (error) {\n popActScope(prevActQueue, prevActScopeDepth);\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((error = aggregateErrors(\n ReactSharedInternals.thrownErrors\n )),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(error))\n : reject(error);\n }\n );\n }\n };\n }\n var returnValue$jscomp$0 = result;\n popActScope(prevActQueue, prevActScopeDepth);\n 0 === prevActScopeDepth &&\n (flushActQueue(queue),\n 0 !== queue.length &&\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\\n\\nawait act(() => ...)\"\n ));\n }),\n (ReactSharedInternals.actQueue = null));\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n ((callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n 0 === prevActScopeDepth\n ? ((ReactSharedInternals.actQueue = queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue$jscomp$0,\n resolve,\n reject\n );\n }))\n : resolve(returnValue$jscomp$0);\n }\n };\n };\n exports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n };\n exports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" +\n element +\n \".\"\n );\n var props = assign({}, element.props),\n key = element.key,\n owner = element._owner;\n if (null != config) {\n var JSCompiler_inline_result;\n a: {\n if (\n hasOwnProperty.call(config, \"ref\") &&\n (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(\n config,\n \"ref\"\n ).get) &&\n JSCompiler_inline_result.isReactWarning\n ) {\n JSCompiler_inline_result = !1;\n break a;\n }\n JSCompiler_inline_result = void 0 !== config.ref;\n }\n JSCompiler_inline_result && (owner = getOwner());\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (key = \"\" + config.key));\n for (propName in config)\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n }\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n JSCompiler_inline_result = Array(propName);\n for (var i = 0; i < propName; i++)\n JSCompiler_inline_result[i] = arguments[i + 2];\n props.children = JSCompiler_inline_result;\n }\n props = ReactElement(element.type, key, void 0, void 0, owner, props);\n for (key = 2; key < arguments.length; key++)\n validateChildKeys(arguments[key], props.type);\n return props;\n };\n exports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n defaultValue._currentRenderer = null;\n defaultValue._currentRenderer2 = null;\n return defaultValue;\n };\n exports.createElement = function (type, config, children) {\n if (isValidElementType(type))\n for (var i = 2; i < arguments.length; i++)\n validateChildKeys(arguments[i], type);\n else {\n i = \"\";\n if (\n void 0 === type ||\n (\"object\" === typeof type &&\n null !== type &&\n 0 === Object.keys(type).length)\n )\n i +=\n \" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\";\n if (null === type) var typeString = \"null\";\n else\n isArrayImpl(type)\n ? (typeString = \"array\")\n : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE\n ? ((typeString =\n \"<\" +\n (getComponentNameFromType(type.type) || \"Unknown\") +\n \" />\"),\n (i =\n \" Did you accidentally export a JSX literal instead of a component?\"))\n : (typeString = typeof type);\n console.error(\n \"React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s\",\n typeString,\n i\n );\n }\n var propName;\n i = {};\n typeString = null;\n if (null != config)\n for (propName in (didWarnAboutOldJSXRuntime ||\n !(\"__self\" in config) ||\n \"key\" in config ||\n ((didWarnAboutOldJSXRuntime = !0),\n console.warn(\n \"Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform\"\n )),\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (typeString = \"\" + config.key)),\n config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (i[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) i.children = children;\n else if (1 < childrenLength) {\n for (\n var childArray = Array(childrenLength), _i = 0;\n _i < childrenLength;\n _i++\n )\n childArray[_i] = arguments[_i + 2];\n Object.freeze && Object.freeze(childArray);\n i.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === i[propName] && (i[propName] = childrenLength[propName]);\n typeString &&\n defineKeyPropWarningGetter(\n i,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(type, typeString, void 0, void 0, getOwner(), i);\n };\n exports.createRef = function () {\n var refObject = { current: null };\n Object.seal(refObject);\n return refObject;\n };\n exports.forwardRef = function (render) {\n null != render && render.$$typeof === REACT_MEMO_TYPE\n ? console.error(\n \"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).\"\n )\n : \"function\" !== typeof render\n ? console.error(\n \"forwardRef requires a render function but was given %s.\",\n null === render ? \"null\" : typeof render\n )\n : 0 !== render.length &&\n 2 !== render.length &&\n console.error(\n \"forwardRef render functions accept exactly two parameters: props and ref. %s\",\n 1 === render.length\n ? \"Did you forget to use the ref parameter?\"\n : \"Any additional parameter will be undefined.\"\n );\n null != render &&\n null != render.defaultProps &&\n console.error(\n \"forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?\"\n );\n var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render },\n ownName;\n Object.defineProperty(elementType, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n render.name ||\n render.displayName ||\n (Object.defineProperty(render, \"name\", { value: name }),\n (render.displayName = name));\n }\n });\n return elementType;\n };\n exports.isValidElement = isValidElement;\n exports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n };\n exports.memo = function (type, compare) {\n isValidElementType(type) ||\n console.error(\n \"memo: The first argument must be a component. Instead received: %s\",\n null === type ? \"null\" : typeof type\n );\n compare = {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n var ownName;\n Object.defineProperty(compare, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n type.name ||\n type.displayName ||\n (Object.defineProperty(type, \"name\", { value: name }),\n (type.displayName = name));\n }\n });\n return compare;\n };\n exports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n currentTransition._updatedFibers = new Set();\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((scope = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < scope &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n )),\n (ReactSharedInternals.T = prevTransition);\n }\n };\n exports.unstable_useCacheRefresh = function () {\n return resolveDispatcher().useCacheRefresh();\n };\n exports.use = function (usable) {\n return resolveDispatcher().use(usable);\n };\n exports.useActionState = function (action, initialState, permalink) {\n return resolveDispatcher().useActionState(\n action,\n initialState,\n permalink\n );\n };\n exports.useCallback = function (callback, deps) {\n return resolveDispatcher().useCallback(callback, deps);\n };\n exports.useContext = function (Context) {\n var dispatcher = resolveDispatcher();\n Context.$$typeof === REACT_CONSUMER_TYPE &&\n console.error(\n \"Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?\"\n );\n return dispatcher.useContext(Context);\n };\n exports.useDebugValue = function (value, formatterFn) {\n return resolveDispatcher().useDebugValue(value, formatterFn);\n };\n exports.useDeferredValue = function (value, initialValue) {\n return resolveDispatcher().useDeferredValue(value, initialValue);\n };\n exports.useEffect = function (create, deps) {\n return resolveDispatcher().useEffect(create, deps);\n };\n exports.useId = function () {\n return resolveDispatcher().useId();\n };\n exports.useImperativeHandle = function (ref, create, deps) {\n return resolveDispatcher().useImperativeHandle(ref, create, deps);\n };\n exports.useInsertionEffect = function (create, deps) {\n return resolveDispatcher().useInsertionEffect(create, deps);\n };\n exports.useLayoutEffect = function (create, deps) {\n return resolveDispatcher().useLayoutEffect(create, deps);\n };\n exports.useMemo = function (create, deps) {\n return resolveDispatcher().useMemo(create, deps);\n };\n exports.useOptimistic = function (passthrough, reducer) {\n return resolveDispatcher().useOptimistic(passthrough, reducer);\n };\n exports.useReducer = function (reducer, initialArg, init) {\n return resolveDispatcher().useReducer(reducer, initialArg, init);\n };\n exports.useRef = function (initialValue) {\n return resolveDispatcher().useRef(initialValue);\n };\n exports.useState = function (initialState) {\n return resolveDispatcher().useState(initialState);\n };\n exports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n return resolveDispatcher().useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n };\n exports.useTransition = function () {\n return resolveDispatcher().useTransition();\n };\n exports.version = \"19.1.0-canary-de1eaa26-20250124\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","(()=>{\"use strict\";var e={328:e=>{function hash(e){var r=5381,_=e.length;while(_){r=r*33^e.charCodeAt(--_)}return r>>>0}e.exports=hash}};var r={};function __nccwpck_require__(_){var a=r[_];if(a!==undefined){return a.exports}var t=r[_]={exports:{}};var i=true;try{e[_](t,t.exports,__nccwpck_require__);i=false}finally{if(i)delete r[_]}return t.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var _=__nccwpck_require__(328);module.exports=_})();","// ISC License\n\n// Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov\n\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n//\n// https://github.com/alexeyraspopov/picocolors/blob/b6261487e7b81aaab2440e397a356732cad9e342/picocolors.js#L1\n\nconst { env, stdout } = globalThis?.process ?? {}\n\nconst enabled =\n env &&\n !env.NO_COLOR &&\n (env.FORCE_COLOR || (stdout?.isTTY && !env.CI && env.TERM !== 'dumb'))\n\nconst replaceClose = (\n str: string,\n close: string,\n replace: string,\n index: number\n): string => {\n const start = str.substring(0, index) + replace\n const end = str.substring(index + close.length)\n const nextIndex = end.indexOf(close)\n return ~nextIndex\n ? start + replaceClose(end, close, replace, nextIndex)\n : start + end\n}\n\nconst formatter = (open: string, close: string, replace = open) => {\n if (!enabled) return String\n return (input: string) => {\n const string = '' + input\n const index = string.indexOf(close, open.length)\n return ~index\n ? open + replaceClose(string, close, replace, index) + close\n : open + string + close\n }\n}\n\nexport const reset = enabled ? (s: string) => `\\x1b[0m${s}\\x1b[0m` : String\nexport const bold = formatter('\\x1b[1m', '\\x1b[22m', '\\x1b[22m\\x1b[1m')\nexport const dim = formatter('\\x1b[2m', '\\x1b[22m', '\\x1b[22m\\x1b[2m')\nexport const italic = formatter('\\x1b[3m', '\\x1b[23m')\nexport const underline = formatter('\\x1b[4m', '\\x1b[24m')\nexport const inverse = formatter('\\x1b[7m', '\\x1b[27m')\nexport const hidden = formatter('\\x1b[8m', '\\x1b[28m')\nexport const strikethrough = formatter('\\x1b[9m', '\\x1b[29m')\nexport const black = formatter('\\x1b[30m', '\\x1b[39m')\nexport const red = formatter('\\x1b[31m', '\\x1b[39m')\nexport const green = formatter('\\x1b[32m', '\\x1b[39m')\nexport const yellow = formatter('\\x1b[33m', '\\x1b[39m')\nexport const blue = formatter('\\x1b[34m', '\\x1b[39m')\nexport const magenta = formatter('\\x1b[35m', '\\x1b[39m')\nexport const purple = formatter('\\x1b[38;2;173;127;168m', '\\x1b[39m')\nexport const cyan = formatter('\\x1b[36m', '\\x1b[39m')\nexport const white = formatter('\\x1b[37m', '\\x1b[39m')\nexport const gray = formatter('\\x1b[90m', '\\x1b[39m')\nexport const bgBlack = formatter('\\x1b[40m', '\\x1b[49m')\nexport const bgRed = formatter('\\x1b[41m', '\\x1b[49m')\nexport const bgGreen = formatter('\\x1b[42m', '\\x1b[49m')\nexport const bgYellow = formatter('\\x1b[43m', '\\x1b[49m')\nexport const bgBlue = formatter('\\x1b[44m', '\\x1b[49m')\nexport const bgMagenta = formatter('\\x1b[45m', '\\x1b[49m')\nexport const bgCyan = formatter('\\x1b[46m', '\\x1b[49m')\nexport const bgWhite = formatter('\\x1b[47m', '\\x1b[49m')\n","import type { RouteDefinition } from '../route-definitions/route-definition'\n\n/**\n * RouteModuleOptions is the options that are passed to the route module, other\n * route modules should extend this class to add specific options for their\n * route.\n */\nexport interface RouteModuleOptions<\n D extends RouteDefinition = RouteDefinition,\n U = unknown,\n> {\n readonly definition: Readonly<D>\n readonly userland: Readonly<U>\n}\n\n/**\n * RouteHandlerContext is the base context for a route handler.\n */\nexport interface RouteModuleHandleContext {\n /**\n * Any matched parameters for the request. This is only defined for dynamic\n * routes.\n */\n params: Record<string, string | string[] | undefined> | undefined\n}\n\n/**\n * RouteModule is the base class for all route modules. This class should be\n * extended by all route modules.\n */\nexport abstract class RouteModule<\n D extends RouteDefinition = RouteDefinition,\n U = unknown,\n> {\n /**\n * The userland module. This is the module that is exported from the user's\n * code. This is marked as readonly to ensure that the module is not mutated\n * because the module (when compiled) only provides getters.\n */\n public readonly userland: Readonly<U>\n\n /**\n * The definition of the route.\n */\n public readonly definition: Readonly<D>\n\n /**\n * The shared modules that are exposed and required for the route module.\n */\n public static readonly sharedModules: any\n\n constructor({ userland, definition }: RouteModuleOptions<D, U>) {\n this.userland = userland\n this.definition = definition\n }\n}\n","export const RSC_HEADER = 'RSC' as const\nexport const ACTION_HEADER = 'Next-Action' as const\n// TODO: Instead of sending the full router state, we only need to send the\n// segment path. Saves bytes. Then we could also use this field for segment\n// prefetches, which also need to specify a particular segment.\nexport const NEXT_ROUTER_STATE_TREE_HEADER = 'Next-Router-State-Tree' as const\nexport const NEXT_ROUTER_PREFETCH_HEADER = 'Next-Router-Prefetch' as const\n// This contains the path to the segment being prefetched.\n// TODO: If we change Next-Router-State-Tree to be a segment path, we can use\n// that instead. Then Next-Router-Prefetch and Next-Router-Segment-Prefetch can\n// be merged into a single enum.\nexport const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER =\n 'Next-Router-Segment-Prefetch' as const\nexport const NEXT_HMR_REFRESH_HEADER = 'Next-HMR-Refresh' as const\nexport const NEXT_URL = 'Next-Url' as const\nexport const RSC_CONTENT_TYPE_HEADER = 'text/x-component' as const\n\nexport const FLIGHT_HEADERS = [\n RSC_HEADER,\n NEXT_ROUTER_STATE_TREE_HEADER,\n NEXT_ROUTER_PREFETCH_HEADER,\n NEXT_HMR_REFRESH_HEADER,\n NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,\n] as const\n\nexport const NEXT_RSC_UNION_QUERY = '_rsc' as const\n\nexport const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time' as const\nexport const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed' as const\nexport const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path' as const\nexport const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query' as const\nexport const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender' as const\n","export class ReflectAdapter {\n static get<T extends object>(\n target: T,\n prop: string | symbol,\n receiver: unknown\n ): any {\n const value = Reflect.get(target, prop, receiver)\n if (typeof value === 'function') {\n return value.bind(target)\n }\n\n return value\n }\n\n static set<T extends object>(\n target: T,\n prop: string | symbol,\n value: any,\n receiver: any\n ): boolean {\n return Reflect.set(target, prop, value, receiver)\n }\n\n static has<T extends object>(target: T, prop: string | symbol): boolean {\n return Reflect.has(target, prop)\n }\n\n static deleteProperty<T extends object>(\n target: T,\n prop: string | symbol\n ): boolean {\n return Reflect.deleteProperty(target, prop)\n }\n}\n","import type { IncomingHttpHeaders } from 'http'\n\nimport { ReflectAdapter } from './reflect'\n\n/**\n * @internal\n */\nexport class ReadonlyHeadersError extends Error {\n constructor() {\n super(\n 'Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'\n )\n }\n\n public static callable() {\n throw new ReadonlyHeadersError()\n }\n}\n\nexport type ReadonlyHeaders = Headers & {\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n append(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n set(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n delete(...args: any[]): void\n}\nexport class HeadersAdapter extends Headers {\n private readonly headers: IncomingHttpHeaders\n\n constructor(headers: IncomingHttpHeaders) {\n // We've already overridden the methods that would be called, so we're just\n // calling the super constructor to ensure that the instanceof check works.\n super()\n\n this.headers = new Proxy(headers, {\n get(target, prop, receiver) {\n // Because this is just an object, we expect that all \"get\" operations\n // are for properties. If it's a \"get\" for a symbol, we'll just return\n // the symbol.\n if (typeof prop === 'symbol') {\n return ReflectAdapter.get(target, prop, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return undefined.\n if (typeof original === 'undefined') return\n\n // If the original casing exists, return the value.\n return ReflectAdapter.get(target, original, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'symbol') {\n return ReflectAdapter.set(target, prop, value, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, use the prop as the key.\n return ReflectAdapter.set(target, original ?? prop, value, receiver)\n },\n has(target, prop) {\n if (typeof prop === 'symbol') return ReflectAdapter.has(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return false.\n if (typeof original === 'undefined') return false\n\n // If the original casing exists, return true.\n return ReflectAdapter.has(target, original)\n },\n deleteProperty(target, prop) {\n if (typeof prop === 'symbol')\n return ReflectAdapter.deleteProperty(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return true.\n if (typeof original === 'undefined') return true\n\n // If the original casing exists, delete the property.\n return ReflectAdapter.deleteProperty(target, original)\n },\n })\n }\n\n /**\n * Seals a Headers instance to prevent modification by throwing an error when\n * any mutating method is called.\n */\n public static seal(headers: Headers): ReadonlyHeaders {\n return new Proxy<ReadonlyHeaders>(headers, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'append':\n case 'delete':\n case 'set':\n return ReadonlyHeadersError.callable\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n }\n\n /**\n * Merges a header value into a string. This stores multiple values as an\n * array, so we need to merge them into a string.\n *\n * @param value a header value\n * @returns a merged header value (a string)\n */\n private merge(value: string | string[]): string {\n if (Array.isArray(value)) return value.join(', ')\n\n return value\n }\n\n /**\n * Creates a Headers instance from a plain object or a Headers instance.\n *\n * @param headers a plain object or a Headers instance\n * @returns a headers instance\n */\n public static from(headers: IncomingHttpHeaders | Headers): Headers {\n if (headers instanceof Headers) return headers\n\n return new HeadersAdapter(headers)\n }\n\n public append(name: string, value: string): void {\n const existing = this.headers[name]\n if (typeof existing === 'string') {\n this.headers[name] = [existing, value]\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n this.headers[name] = value\n }\n }\n\n public delete(name: string): void {\n delete this.headers[name]\n }\n\n public get(name: string): string | null {\n const value = this.headers[name]\n if (typeof value !== 'undefined') return this.merge(value)\n\n return null\n }\n\n public has(name: string): boolean {\n return typeof this.headers[name] !== 'undefined'\n }\n\n public set(name: string, value: string): void {\n this.headers[name] = value\n }\n\n public forEach(\n callbackfn: (value: string, name: string, parent: Headers) => void,\n thisArg?: any\n ): void {\n for (const [name, value] of this.entries()) {\n callbackfn.call(thisArg, value, name, this)\n }\n }\n\n public *entries(): HeadersIterator<[string, string]> {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(name) as string\n\n yield [name, value] as [string, string]\n }\n }\n\n public *keys(): HeadersIterator<string> {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n yield name\n }\n }\n\n public *values(): HeadersIterator<string> {\n for (const key of Object.keys(this.headers)) {\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(key) as string\n\n yield value\n }\n }\n\n public [Symbol.iterator](): HeadersIterator<[string, string]> {\n return this.entries()\n }\n}\n","import { RequestCookies } from '../cookies'\n\nimport { ResponseCookies } from '../cookies'\nimport { ReflectAdapter } from './reflect'\nimport { workAsyncStorage } from '../../../app-render/work-async-storage.external'\nimport {\n getExpectedRequestStore,\n type RequestStore,\n} from '../../../app-render/work-unit-async-storage.external'\n\n/**\n * @internal\n */\nexport class ReadonlyRequestCookiesError extends Error {\n constructor() {\n super(\n 'Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options'\n )\n }\n\n public static callable() {\n throw new ReadonlyRequestCookiesError()\n }\n}\n\n// We use this to type some APIs but we don't construct instances directly\nexport type { ResponseCookies }\n\n// The `cookies()` API is a mix of request and response cookies. For `.get()` methods,\n// we want to return the request cookie if it exists. For mutative methods like `.set()`,\n// we want to return the response cookie.\nexport type ReadonlyRequestCookies = Omit<\n RequestCookies,\n 'set' | 'clear' | 'delete'\n> &\n Pick<ResponseCookies, 'set' | 'delete'>\n\nexport class RequestCookiesAdapter {\n public static seal(cookies: RequestCookies): ReadonlyRequestCookies {\n return new Proxy(cookies as any, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'clear':\n case 'delete':\n case 'set':\n return ReadonlyRequestCookiesError.callable\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n }\n}\n\nconst SYMBOL_MODIFY_COOKIE_VALUES = Symbol.for('next.mutated.cookies')\n\nexport function getModifiedCookieValues(\n cookies: ResponseCookies\n): ResponseCookie[] {\n const modified: ResponseCookie[] | undefined = (cookies as unknown as any)[\n SYMBOL_MODIFY_COOKIE_VALUES\n ]\n if (!modified || !Array.isArray(modified) || modified.length === 0) {\n return []\n }\n\n return modified\n}\n\ntype SetCookieArgs =\n | [key: string, value: string, cookie?: Partial<ResponseCookie>]\n | [options: ResponseCookie]\n\nexport function appendMutableCookies(\n headers: Headers,\n mutableCookies: ResponseCookies\n): boolean {\n const modifiedCookieValues = getModifiedCookieValues(mutableCookies)\n if (modifiedCookieValues.length === 0) {\n return false\n }\n\n // Return a new response that extends the response with\n // the modified cookies as fallbacks. `res` cookies\n // will still take precedence.\n const resCookies = new ResponseCookies(headers)\n const returnedCookies = resCookies.getAll()\n\n // Set the modified cookies as fallbacks.\n for (const cookie of modifiedCookieValues) {\n resCookies.set(cookie)\n }\n\n // Set the original cookies as the final values.\n for (const cookie of returnedCookies) {\n resCookies.set(cookie)\n }\n\n return true\n}\n\ntype ResponseCookie = NonNullable<\n ReturnType<InstanceType<typeof ResponseCookies>['get']>\n>\n\nexport class MutableRequestCookiesAdapter {\n public static wrap(\n cookies: RequestCookies,\n onUpdateCookies?: (cookies: string[]) => void\n ): ResponseCookies {\n const responseCookies = new ResponseCookies(new Headers())\n for (const cookie of cookies.getAll()) {\n responseCookies.set(cookie)\n }\n\n let modifiedValues: ResponseCookie[] = []\n const modifiedCookies = new Set<string>()\n const updateResponseCookies = () => {\n // TODO-APP: change method of getting workStore\n const workStore = workAsyncStorage.getStore()\n if (workStore) {\n workStore.pathWasRevalidated = true\n }\n\n const allCookies = responseCookies.getAll()\n modifiedValues = allCookies.filter((c) => modifiedCookies.has(c.name))\n if (onUpdateCookies) {\n const serializedCookies: string[] = []\n for (const cookie of modifiedValues) {\n const tempCookies = new ResponseCookies(new Headers())\n tempCookies.set(cookie)\n serializedCookies.push(tempCookies.toString())\n }\n\n onUpdateCookies(serializedCookies)\n }\n }\n\n const wrappedCookies = new Proxy(responseCookies, {\n get(target, prop, receiver) {\n switch (prop) {\n // A special symbol to get the modified cookie values\n case SYMBOL_MODIFY_COOKIE_VALUES:\n return modifiedValues\n\n // TODO: Throw error if trying to set a cookie after the response\n // headers have been set.\n case 'delete':\n return function (...args: [string] | [ResponseCookie]) {\n modifiedCookies.add(\n typeof args[0] === 'string' ? args[0] : args[0].name\n )\n try {\n target.delete(...args)\n return wrappedCookies\n } finally {\n updateResponseCookies()\n }\n }\n case 'set':\n return function (...args: SetCookieArgs) {\n modifiedCookies.add(\n typeof args[0] === 'string' ? args[0] : args[0].name\n )\n try {\n target.set(...args)\n return wrappedCookies\n } finally {\n updateResponseCookies()\n }\n }\n\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n\n return wrappedCookies\n }\n}\n\nexport function wrapWithMutableAccessCheck(\n responseCookies: ResponseCookies\n): ResponseCookies {\n const wrappedCookies = new Proxy(responseCookies, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'delete':\n return function (...args: [string] | [ResponseCookie]) {\n ensureCookiesAreStillMutable('cookies().delete')\n target.delete(...args)\n return wrappedCookies\n }\n case 'set':\n return function (...args: SetCookieArgs) {\n ensureCookiesAreStillMutable('cookies().set')\n target.set(...args)\n return wrappedCookies\n }\n\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n return wrappedCookies\n}\n\nexport function areCookiesMutableInCurrentPhase(requestStore: RequestStore) {\n return requestStore.phase === 'action'\n}\n\n/** Ensure that cookies() starts throwing on mutation\n * if we changed phases and can no longer mutate.\n *\n * This can happen when going:\n * 'render' -> 'after'\n * 'action' -> 'render'\n * */\nfunction ensureCookiesAreStillMutable(callingExpression: string) {\n const requestStore = getExpectedRequestStore(callingExpression)\n if (!areCookiesMutableInCurrentPhase(requestStore)) {\n // TODO: maybe we can give a more precise error message based on callingExpression?\n throw new ReadonlyRequestCookiesError()\n }\n}\n\nexport function responseCookiesToRequestCookies(\n responseCookies: ResponseCookies\n): RequestCookies {\n const requestCookies = new RequestCookies(new Headers())\n for (const cookie of responseCookies.getAll()) {\n requestCookies.set(cookie)\n }\n return requestCookies\n}\n","import type { ServerRuntime } from '../types'\n\nexport const NEXT_QUERY_PARAM_PREFIX = 'nxtP'\nexport const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'\n\nexport const MATCHED_PATH_HEADER = 'x-matched-path'\nexport const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'\nexport const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER =\n 'x-prerender-revalidate-if-generated'\n\nexport const RSC_PREFETCH_SUFFIX = '.prefetch.rsc'\nexport const RSC_SEGMENTS_DIR_SUFFIX = '.segments'\nexport const RSC_SEGMENT_SUFFIX = '.segment.rsc'\nexport const RSC_SUFFIX = '.rsc'\nexport const ACTION_SUFFIX = '.action'\nexport const NEXT_DATA_SUFFIX = '.json'\nexport const NEXT_META_SUFFIX = '.meta'\nexport const NEXT_BODY_SUFFIX = '.body'\n\nexport const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'\nexport const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'\nexport const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER =\n 'x-next-revalidate-tag-token'\n\nexport const NEXT_RESUME_HEADER = 'next-resume'\n\n// if these change make sure we update the related\n// documentation as well\nexport const NEXT_CACHE_TAG_MAX_ITEMS = 128\nexport const NEXT_CACHE_TAG_MAX_LENGTH = 256\nexport const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024\nexport const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'\n\n// in seconds\nexport const CACHE_ONE_YEAR = 31536000\n\n// in seconds, represents revalidate=false. I.e. never revaliate.\n// We use this value since it can be represented as a V8 SMI for optimal performance.\n// It can also be serialized as JSON if it ever leaks accidentally as an actual value.\nexport const INFINITE_CACHE = 0xfffffffe\n\n// Patterns to detect middleware files\nexport const MIDDLEWARE_FILENAME = 'middleware'\nexport const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`\n\n// Pattern to detect instrumentation hooks file\nexport const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'\n\n// Because on Windows absolute paths in the generated code can break because of numbers, eg 1 in the path,\n// we have to use a private alias\nexport const PAGES_DIR_ALIAS = 'private-next-pages'\nexport const DOT_NEXT_ALIAS = 'private-dot-next'\nexport const ROOT_DIR_ALIAS = 'private-next-root-dir'\nexport const APP_DIR_ALIAS = 'private-next-app-dir'\nexport const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'\nexport const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'\nexport const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'\nexport const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'\nexport const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'\nexport const RSC_ACTION_CLIENT_WRAPPER_ALIAS =\n 'private-next-rsc-action-client-wrapper'\n\nexport const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`\n\nexport const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`\n\nexport const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`\n\nexport const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`\n\nexport const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`\n\nexport const SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`\n\nexport const GSP_NO_RETURNED_VALUE =\n 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'\nexport const GSSP_NO_RETURNED_VALUE =\n 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'\n\nexport const UNSTABLE_REVALIDATE_RENAME_ERROR =\n 'The `unstable_revalidate` property is available for general use.\\n' +\n 'Please use `revalidate` instead.'\n\nexport const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`\n\nexport const NON_STANDARD_NODE_ENV = `You are using a non-standard \"NODE_ENV\" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`\n\nexport const SSG_FALLBACK_EXPORT_ERROR = `Pages with \\`fallback\\` enabled in \\`getStaticPaths\\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`\n\nexport const ESLINT_DEFAULT_DIRS = ['app', 'pages', 'components', 'lib', 'src']\n\nexport const SERVER_RUNTIME: Record<string, ServerRuntime> = {\n edge: 'edge',\n experimentalEdge: 'experimental-edge',\n nodejs: 'nodejs',\n}\n\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */\nconst WEBPACK_LAYERS_NAMES = {\n /**\n * The layer for the shared code between the client and server bundles.\n */\n shared: 'shared',\n /**\n * The layer for server-only runtime and picking up `react-server` export conditions.\n * Including app router RSC pages and app router custom routes and metadata routes.\n */\n reactServerComponents: 'rsc',\n /**\n * Server Side Rendering layer for app (ssr).\n */\n serverSideRendering: 'ssr',\n /**\n * The browser client bundle layer for actions.\n */\n actionBrowser: 'action-browser',\n /**\n * The layer for the API routes.\n */\n api: 'api',\n /**\n * The layer for the middleware code.\n */\n middleware: 'middleware',\n /**\n * The layer for the instrumentation hooks.\n */\n instrument: 'instrument',\n /**\n * The layer for assets on the edge.\n */\n edgeAsset: 'edge-asset',\n /**\n * The browser client bundle layer for App directory.\n */\n appPagesBrowser: 'app-pages-browser',\n} as const\n\nexport type WebpackLayerName =\n (typeof WEBPACK_LAYERS_NAMES)[keyof typeof WEBPACK_LAYERS_NAMES]\n\nconst WEBPACK_LAYERS = {\n ...WEBPACK_LAYERS_NAMES,\n GROUP: {\n builtinReact: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n serverOnly: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n neutralTarget: [\n // pages api\n WEBPACK_LAYERS_NAMES.api,\n ],\n clientOnly: [\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n ],\n bundled: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.shared,\n WEBPACK_LAYERS_NAMES.instrument,\n ],\n appPages: [\n // app router pages and layouts\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n },\n}\n\nconst WEBPACK_RESOURCE_QUERIES = {\n edgeSSREntry: '__next_edge_ssr_entry__',\n metadata: '__next_metadata__',\n metadataRoute: '__next_metadata_route__',\n metadataImageMeta: '__next_metadata_image_meta__',\n}\n\nexport { WEBPACK_LAYERS, WEBPACK_RESOURCE_QUERIES }\n","/**\n * Contains predefined constants for the trace span name in next/server.\n *\n * Currently, next/server/tracer is internal implementation only for tracking\n * next.js's implementation only with known span names defined here.\n **/\n\n// eslint typescript has a bug with TS enums\n/* eslint-disable no-shadow */\n\nenum BaseServerSpan {\n handleRequest = 'BaseServer.handleRequest',\n run = 'BaseServer.run',\n pipe = 'BaseServer.pipe',\n getStaticHTML = 'BaseServer.getStaticHTML',\n render = 'BaseServer.render',\n renderToResponseWithComponents = 'BaseServer.renderToResponseWithComponents',\n renderToResponse = 'BaseServer.renderToResponse',\n renderToHTML = 'BaseServer.renderToHTML',\n renderError = 'BaseServer.renderError',\n renderErrorToResponse = 'BaseServer.renderErrorToResponse',\n renderErrorToHTML = 'BaseServer.renderErrorToHTML',\n render404 = 'BaseServer.render404',\n}\n\nenum LoadComponentsSpan {\n loadDefaultErrorComponents = 'LoadComponents.loadDefaultErrorComponents',\n loadComponents = 'LoadComponents.loadComponents',\n}\n\nenum NextServerSpan {\n getRequestHandler = 'NextServer.getRequestHandler',\n getServer = 'NextServer.getServer',\n getServerRequestHandler = 'NextServer.getServerRequestHandler',\n createServer = 'createServer.createServer',\n}\n\nenum NextNodeServerSpan {\n compression = 'NextNodeServer.compression',\n getBuildId = 'NextNodeServer.getBuildId',\n createComponentTree = 'NextNodeServer.createComponentTree',\n clientComponentLoading = 'NextNodeServer.clientComponentLoading',\n getLayoutOrPageModule = 'NextNodeServer.getLayoutOrPageModule',\n generateStaticRoutes = 'NextNodeServer.generateStaticRoutes',\n generateFsStaticRoutes = 'NextNodeServer.generateFsStaticRoutes',\n generatePublicRoutes = 'NextNodeServer.generatePublicRoutes',\n generateImageRoutes = 'NextNodeServer.generateImageRoutes.route',\n sendRenderResult = 'NextNodeServer.sendRenderResult',\n proxyRequest = 'NextNodeServer.proxyRequest',\n runApi = 'NextNodeServer.runApi',\n render = 'NextNodeServer.render',\n renderHTML = 'NextNodeServer.renderHTML',\n imageOptimizer = 'NextNodeServer.imageOptimizer',\n getPagePath = 'NextNodeServer.getPagePath',\n getRoutesManifest = 'NextNodeServer.getRoutesManifest',\n findPageComponents = 'NextNodeServer.findPageComponents',\n getFontManifest = 'NextNodeServer.getFontManifest',\n getServerComponentManifest = 'NextNodeServer.getServerComponentManifest',\n getRequestHandler = 'NextNodeServer.getRequestHandler',\n renderToHTML = 'NextNodeServer.renderToHTML',\n renderError = 'NextNodeServer.renderError',\n renderErrorToHTML = 'NextNodeServer.renderErrorToHTML',\n render404 = 'NextNodeServer.render404',\n startResponse = 'NextNodeServer.startResponse',\n\n // nested inner span, does not require parent scope name\n route = 'route',\n onProxyReq = 'onProxyReq',\n apiResolver = 'apiResolver',\n internalFetch = 'internalFetch',\n}\n\nenum StartServerSpan {\n startServer = 'startServer.startServer',\n}\n\nenum RenderSpan {\n getServerSideProps = 'Render.getServerSideProps',\n getStaticProps = 'Render.getStaticProps',\n renderToString = 'Render.renderToString',\n renderDocument = 'Render.renderDocument',\n createBodyResult = 'Render.createBodyResult',\n}\n\nenum AppRenderSpan {\n renderToString = 'AppRender.renderToString',\n renderToReadableStream = 'AppRender.renderToReadableStream',\n getBodyResult = 'AppRender.getBodyResult',\n fetch = 'AppRender.fetch',\n}\n\nenum RouterSpan {\n executeRoute = 'Router.executeRoute',\n}\n\nenum NodeSpan {\n runHandler = 'Node.runHandler',\n}\n\nenum AppRouteRouteHandlersSpan {\n runHandler = 'AppRouteRouteHandlers.runHandler',\n}\n\nenum ResolveMetadataSpan {\n generateMetadata = 'ResolveMetadata.generateMetadata',\n generateViewport = 'ResolveMetadata.generateViewport',\n}\n\nenum MiddlewareSpan {\n execute = 'Middleware.execute',\n}\n\ntype SpanTypes =\n | `${BaseServerSpan}`\n | `${LoadComponentsSpan}`\n | `${NextServerSpan}`\n | `${StartServerSpan}`\n | `${NextNodeServerSpan}`\n | `${RenderSpan}`\n | `${RouterSpan}`\n | `${AppRenderSpan}`\n | `${NodeSpan}`\n | `${AppRouteRouteHandlersSpan}`\n | `${ResolveMetadataSpan}`\n | `${MiddlewareSpan}`\n\n// This list is used to filter out spans that are not relevant to the user\nexport const NextVanillaSpanAllowlist = [\n MiddlewareSpan.execute,\n BaseServerSpan.handleRequest,\n RenderSpan.getServerSideProps,\n RenderSpan.getStaticProps,\n AppRenderSpan.fetch,\n AppRenderSpan.getBodyResult,\n RenderSpan.renderDocument,\n NodeSpan.runHandler,\n AppRouteRouteHandlersSpan.runHandler,\n ResolveMetadataSpan.generateMetadata,\n ResolveMetadataSpan.generateViewport,\n NextNodeServerSpan.createComponentTree,\n NextNodeServerSpan.findPageComponents,\n NextNodeServerSpan.getLayoutOrPageModule,\n NextNodeServerSpan.startResponse,\n NextNodeServerSpan.clientComponentLoading,\n]\n\n// These Spans are allowed to be always logged\n// when the otel log prefix env is set\nexport const LogSpanAllowList = [\n NextNodeServerSpan.findPageComponents,\n NextNodeServerSpan.createComponentTree,\n NextNodeServerSpan.clientComponentLoading,\n]\n\nexport {\n BaseServerSpan,\n LoadComponentsSpan,\n NextServerSpan,\n NextNodeServerSpan,\n StartServerSpan,\n RenderSpan,\n RouterSpan,\n AppRenderSpan,\n NodeSpan,\n AppRouteRouteHandlersSpan,\n ResolveMetadataSpan,\n MiddlewareSpan,\n}\n\nexport type { SpanTypes }\n","import type { IncomingMessage } from 'http'\nimport type { BaseNextRequest } from '../base-http'\nimport type { CookieSerializeOptions } from 'next/dist/compiled/cookie'\nimport type { NextApiResponse } from '../../shared/lib/utils'\n\nimport { HeadersAdapter } from '../web/spec-extension/adapters/headers'\nimport {\n PRERENDER_REVALIDATE_HEADER,\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER,\n} from '../../lib/constants'\nimport { getTracer } from '../lib/trace/tracer'\nimport { NodeSpan } from '../lib/trace/constants'\n\nexport type NextApiRequestCookies = Partial<{ [key: string]: string }>\nexport type NextApiRequestQuery = Partial<{ [key: string]: string | string[] }>\n\nexport type __ApiPreviewProps = {\n previewModeId: string\n previewModeEncryptionKey: string\n previewModeSigningKey: string\n}\n\nexport function wrapApiHandler<T extends (...args: any[]) => any>(\n page: string,\n handler: T\n): T {\n return ((...args) => {\n getTracer().setRootSpanAttribute('next.route', page)\n // Call API route method\n return getTracer().trace(\n NodeSpan.runHandler,\n {\n spanName: `executing api route (pages) ${page}`,\n },\n () => handler(...args)\n )\n }) as T\n}\n\n/**\n *\n * @param res response object\n * @param statusCode `HTTP` status code of response\n */\nexport function sendStatusCode(\n res: NextApiResponse,\n statusCode: number\n): NextApiResponse<any> {\n res.statusCode = statusCode\n return res\n}\n\n/**\n *\n * @param res response object\n * @param [statusOrUrl] `HTTP` status code of redirect\n * @param url URL of redirect\n */\nexport function redirect(\n res: NextApiResponse,\n statusOrUrl: string | number,\n url?: string\n): NextApiResponse<any> {\n if (typeof statusOrUrl === 'string') {\n url = statusOrUrl\n statusOrUrl = 307\n }\n if (typeof statusOrUrl !== 'number' || typeof url !== 'string') {\n throw new Error(\n `Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`\n )\n }\n res.writeHead(statusOrUrl, { Location: url })\n res.write(url)\n res.end()\n return res\n}\n\nexport function checkIsOnDemandRevalidate(\n req: Request | IncomingMessage | BaseNextRequest,\n previewProps: __ApiPreviewProps\n): {\n isOnDemandRevalidate: boolean\n revalidateOnlyGenerated: boolean\n} {\n const headers = HeadersAdapter.from(req.headers)\n\n const previewModeId = headers.get(PRERENDER_REVALIDATE_HEADER)\n const isOnDemandRevalidate = previewModeId === previewProps.previewModeId\n\n const revalidateOnlyGenerated = headers.has(\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER\n )\n\n return { isOnDemandRevalidate, revalidateOnlyGenerated }\n}\n\nexport const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`\nexport const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`\n\nexport const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024\n\nexport const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA)\nexport const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS)\n\nexport function clearPreviewData<T>(\n res: NextApiResponse<T>,\n options: {\n path?: string\n } = {}\n): NextApiResponse<T> {\n if (SYMBOL_CLEARED_COOKIES in res) {\n return res\n }\n\n const { serialize } =\n require('next/dist/compiled/cookie') as typeof import('cookie')\n const previous = res.getHeader('Set-Cookie')\n res.setHeader(`Set-Cookie`, [\n ...(typeof previous === 'string'\n ? [previous]\n : Array.isArray(previous)\n ? previous\n : []),\n serialize(COOKIE_NAME_PRERENDER_BYPASS, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n serialize(COOKIE_NAME_PRERENDER_DATA, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n ])\n\n Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, {\n value: true,\n enumerable: false,\n })\n return res\n}\n\n/**\n * Custom error class\n */\nexport class ApiError extends Error {\n readonly statusCode: number\n\n constructor(statusCode: number, message: string) {\n super(message)\n this.statusCode = statusCode\n }\n}\n\n/**\n * Sends error in `response`\n * @param res response object\n * @param statusCode of response\n * @param message of response\n */\nexport function sendError(\n res: NextApiResponse,\n statusCode: number,\n message: string\n): void {\n res.statusCode = statusCode\n res.statusMessage = message\n res.end(message)\n}\n\ninterface LazyProps {\n req: IncomingMessage\n}\n\n/**\n * Execute getter function only if its needed\n * @param LazyProps `req` and `params` for lazyProp\n * @param prop name of property\n * @param getter function to get data\n */\nexport function setLazyProp<T>(\n { req }: LazyProps,\n prop: string,\n getter: () => T\n): void {\n const opts = { configurable: true, enumerable: true }\n const optsReset = { ...opts, writable: true }\n\n Object.defineProperty(req, prop, {\n ...opts,\n get: () => {\n const value = getter()\n // we set the property on the object to avoid recalculating it\n Object.defineProperty(req, prop, { ...optsReset, value })\n return value\n },\n set: (value) => {\n Object.defineProperty(req, prop, { ...optsReset, value })\n },\n })\n}\n","import type { IncomingMessage } from 'http'\nimport type { ReadonlyRequestCookies } from '../web/spec-extension/adapters/request-cookies'\nimport type { ResponseCookies } from '../web/spec-extension/cookies'\nimport type { BaseNextRequest } from '../base-http'\nimport type { NextRequest } from '../web/spec-extension/request'\n\nimport {\n COOKIE_NAME_PRERENDER_BYPASS,\n checkIsOnDemandRevalidate,\n} from '../api-utils'\nimport type { __ApiPreviewProps } from '../api-utils'\n\nexport class DraftModeProvider {\n public readonly isEnabled: boolean\n\n /**\n * @internal - this declaration is stripped via `tsc --stripInternal`\n */\n private readonly _previewModeId: string | undefined\n\n /**\n * @internal - this declaration is stripped via `tsc --stripInternal`\n */\n private readonly _mutableCookies: ResponseCookies\n\n constructor(\n previewProps: __ApiPreviewProps | undefined,\n req: IncomingMessage | BaseNextRequest<unknown> | NextRequest,\n cookies: ReadonlyRequestCookies,\n mutableCookies: ResponseCookies\n ) {\n // The logic for draftMode() is very similar to tryGetPreviewData()\n // but Draft Mode does not have any data associated with it.\n const isOnDemandRevalidate =\n previewProps &&\n checkIsOnDemandRevalidate(req, previewProps).isOnDemandRevalidate\n\n const cookieValue = cookies.get(COOKIE_NAME_PRERENDER_BYPASS)?.value\n\n this.isEnabled = Boolean(\n !isOnDemandRevalidate &&\n cookieValue &&\n previewProps &&\n (cookieValue === previewProps.previewModeId ||\n // In dev mode, the cookie can be actual hash value preview id but the preview props can still be `development-id`.\n (process.env.NODE_ENV !== 'production' &&\n previewProps.previewModeId === 'development-id'))\n )\n\n this._previewModeId = previewProps?.previewModeId\n this._mutableCookies = mutableCookies\n }\n\n enable() {\n if (!this._previewModeId) {\n throw new Error(\n 'Invariant: previewProps missing previewModeId this should never happen'\n )\n }\n\n this._mutableCookies.set({\n name: COOKIE_NAME_PRERENDER_BYPASS,\n value: this._previewModeId,\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n })\n }\n\n disable() {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n this._mutableCookies.set({\n name: COOKIE_NAME_PRERENDER_BYPASS,\n value: '',\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n expires: new Date(0),\n })\n }\n}\n","import type { BaseNextRequest, BaseNextResponse } from '../base-http'\nimport type { IncomingHttpHeaders } from 'http'\nimport type { RequestStore } from '../app-render/work-unit-async-storage.external'\nimport type { RenderOpts } from '../app-render/types'\nimport type { NextRequest } from '../web/spec-extension/request'\nimport type { __ApiPreviewProps } from '../api-utils'\n\nimport { FLIGHT_HEADERS } from '../../client/components/app-router-headers'\nimport {\n HeadersAdapter,\n type ReadonlyHeaders,\n} from '../web/spec-extension/adapters/headers'\nimport {\n MutableRequestCookiesAdapter,\n RequestCookiesAdapter,\n responseCookiesToRequestCookies,\n wrapWithMutableAccessCheck,\n type ReadonlyRequestCookies,\n} from '../web/spec-extension/adapters/request-cookies'\nimport { ResponseCookies, RequestCookies } from '../web/spec-extension/cookies'\nimport { DraftModeProvider } from './draft-mode-provider'\nimport { splitCookiesString } from '../web/utils'\nimport type { ServerComponentsHmrCache } from '../response-cache'\nimport type { RenderResumeDataCache } from '../resume-data-cache/resume-data-cache'\n\nfunction getHeaders(headers: Headers | IncomingHttpHeaders): ReadonlyHeaders {\n const cleaned = HeadersAdapter.from(headers)\n for (const header of FLIGHT_HEADERS) {\n cleaned.delete(header.toLowerCase())\n }\n\n return HeadersAdapter.seal(cleaned)\n}\n\nfunction getMutableCookies(\n headers: Headers | IncomingHttpHeaders,\n onUpdateCookies?: (cookies: string[]) => void\n): ResponseCookies {\n const cookies = new RequestCookies(HeadersAdapter.from(headers))\n return MutableRequestCookiesAdapter.wrap(cookies, onUpdateCookies)\n}\n\nexport type WrapperRenderOpts = Partial<Pick<RenderOpts, 'onUpdateCookies'>> & {\n previewProps?: __ApiPreviewProps\n}\n\ntype RequestContext = RequestResponsePair & {\n /**\n * The URL of the request. This only specifies the pathname and the search\n * part of the URL. This is only undefined when generating static paths (ie,\n * there is no request in progress, nor do we know one).\n */\n url: {\n /**\n * The pathname of the requested URL.\n */\n pathname: string\n\n /**\n * The search part of the requested URL. If the request did not provide a\n * search part, this will be an empty string.\n */\n search?: string\n }\n phase: RequestStore['phase']\n renderOpts?: WrapperRenderOpts\n isHmrRefresh?: boolean\n serverComponentsHmrCache?: ServerComponentsHmrCache\n implicitTags?: string[] | undefined\n}\n\ntype RequestResponsePair =\n | { req: BaseNextRequest; res: BaseNextResponse } // for an app page\n | { req: NextRequest; res: undefined } // in an api route or middleware\n\n/**\n * If middleware set cookies in this request (indicated by `x-middleware-set-cookie`),\n * then merge those into the existing cookie object, so that when `cookies()` is accessed\n * it's able to read the newly set cookies.\n */\nfunction mergeMiddlewareCookies(\n req: RequestContext['req'],\n existingCookies: RequestCookies | ResponseCookies\n) {\n if (\n 'x-middleware-set-cookie' in req.headers &&\n typeof req.headers['x-middleware-set-cookie'] === 'string'\n ) {\n const setCookieValue = req.headers['x-middleware-set-cookie']\n const responseHeaders = new Headers()\n\n for (const cookie of splitCookiesString(setCookieValue)) {\n responseHeaders.append('set-cookie', cookie)\n }\n\n const responseCookies = new ResponseCookies(responseHeaders)\n\n // Transfer cookies from ResponseCookies to RequestCookies\n for (const cookie of responseCookies.getAll()) {\n existingCookies.set(cookie)\n }\n }\n}\n\nexport function createRequestStoreForRender(\n req: RequestContext['req'],\n res: RequestContext['res'],\n url: RequestContext['url'],\n implicitTags: RequestContext['implicitTags'],\n onUpdateCookies: RenderOpts['onUpdateCookies'],\n previewProps: WrapperRenderOpts['previewProps'],\n isHmrRefresh: RequestContext['isHmrRefresh'],\n serverComponentsHmrCache: RequestContext['serverComponentsHmrCache'],\n renderResumeDataCache: RenderResumeDataCache | undefined\n): RequestStore {\n return createRequestStoreImpl(\n // Pages start in render phase by default\n 'render',\n req,\n res,\n url,\n implicitTags,\n onUpdateCookies,\n renderResumeDataCache,\n previewProps,\n isHmrRefresh,\n serverComponentsHmrCache\n )\n}\n\nexport function createRequestStoreForAPI(\n req: RequestContext['req'],\n url: RequestContext['url'],\n implicitTags: RequestContext['implicitTags'],\n onUpdateCookies: RenderOpts['onUpdateCookies'],\n previewProps: WrapperRenderOpts['previewProps']\n): RequestStore {\n return createRequestStoreImpl(\n // API routes start in action phase by default\n 'action',\n req,\n undefined,\n url,\n implicitTags,\n onUpdateCookies,\n undefined,\n previewProps,\n false,\n undefined\n )\n}\n\nfunction createRequestStoreImpl(\n phase: RequestStore['phase'],\n req: RequestContext['req'],\n res: RequestContext['res'],\n url: RequestContext['url'],\n implicitTags: RequestContext['implicitTags'],\n onUpdateCookies: RenderOpts['onUpdateCookies'],\n renderResumeDataCache: RenderResumeDataCache | undefined,\n previewProps: WrapperRenderOpts['previewProps'],\n isHmrRefresh: RequestContext['isHmrRefresh'],\n serverComponentsHmrCache: RequestContext['serverComponentsHmrCache']\n): RequestStore {\n function defaultOnUpdateCookies(cookies: string[]) {\n if (res) {\n res.setHeader('Set-Cookie', cookies)\n }\n }\n\n const cache: {\n headers?: ReadonlyHeaders\n cookies?: ReadonlyRequestCookies\n mutableCookies?: ResponseCookies\n userspaceMutableCookies?: ResponseCookies\n draftMode?: DraftModeProvider\n } = {}\n\n return {\n type: 'request',\n phase,\n implicitTags: implicitTags ?? [],\n // Rather than just using the whole `url` here, we pull the parts we want\n // to ensure we don't use parts of the URL that we shouldn't. This also\n // lets us avoid requiring an empty string for `search` in the type.\n url: { pathname: url.pathname, search: url.search ?? '' },\n get headers() {\n if (!cache.headers) {\n // Seal the headers object that'll freeze out any methods that could\n // mutate the underlying data.\n cache.headers = getHeaders(req.headers)\n }\n\n return cache.headers\n },\n get cookies() {\n if (!cache.cookies) {\n // if middleware is setting cookie(s), then include those in\n // the initial cached cookies so they can be read in render\n const requestCookies = new RequestCookies(\n HeadersAdapter.from(req.headers)\n )\n\n mergeMiddlewareCookies(req, requestCookies)\n\n // Seal the cookies object that'll freeze out any methods that could\n // mutate the underlying data.\n cache.cookies = RequestCookiesAdapter.seal(requestCookies)\n }\n\n return cache.cookies\n },\n set cookies(value: ReadonlyRequestCookies) {\n cache.cookies = value\n },\n get mutableCookies() {\n if (!cache.mutableCookies) {\n const mutableCookies = getMutableCookies(\n req.headers,\n onUpdateCookies || (res ? defaultOnUpdateCookies : undefined)\n )\n\n mergeMiddlewareCookies(req, mutableCookies)\n\n cache.mutableCookies = mutableCookies\n }\n return cache.mutableCookies\n },\n get userspaceMutableCookies() {\n if (!cache.userspaceMutableCookies) {\n const userspaceMutableCookies = wrapWithMutableAccessCheck(\n this.mutableCookies\n )\n cache.userspaceMutableCookies = userspaceMutableCookies\n }\n return cache.userspaceMutableCookies\n },\n get draftMode() {\n if (!cache.draftMode) {\n cache.draftMode = new DraftModeProvider(\n previewProps,\n req,\n this.cookies,\n this.mutableCookies\n )\n }\n\n return cache.draftMode\n },\n renderResumeDataCache: renderResumeDataCache ?? null,\n isHmrRefresh,\n serverComponentsHmrCache:\n serverComponentsHmrCache ||\n (globalThis as any).__serverComponentsHmrCache,\n }\n}\n\nexport function synchronizeMutableCookies(store: RequestStore) {\n // TODO: does this need to update headers as well?\n store.cookies = RequestCookiesAdapter.seal(\n responseCookiesToRequestCookies(store.mutableCookies)\n )\n}\n","import type { OutgoingHttpHeaders } from 'http'\nimport {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../lib/constants'\n\n/**\n * Converts a Node.js IncomingHttpHeaders object to a Headers object. Any\n * headers with multiple values will be joined with a comma and space. Any\n * headers that have an undefined value will be ignored and others will be\n * coerced to strings.\n *\n * @param nodeHeaders the headers object to convert\n * @returns the converted headers object\n */\nexport function fromNodeOutgoingHttpHeaders(\n nodeHeaders: OutgoingHttpHeaders\n): Headers {\n const headers = new Headers()\n for (let [key, value] of Object.entries(nodeHeaders)) {\n const values = Array.isArray(value) ? value : [value]\n for (let v of values) {\n if (typeof v === 'undefined') continue\n if (typeof v === 'number') {\n v = v.toString()\n }\n\n headers.append(key, v)\n }\n }\n return headers\n}\n\n/*\n Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n that are within a single set-cookie field-value, such as in the Expires portion.\n This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n React Native's fetch does this for *every* header, including set-cookie.\n \n Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nexport function splitCookiesString(cookiesString: string) {\n var cookiesStrings = []\n var pos = 0\n var start\n var ch\n var lastComma\n var nextStart\n var cookiesSeparatorFound\n\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1\n }\n return pos < cookiesString.length\n }\n\n function notSpecialChar() {\n ch = cookiesString.charAt(pos)\n\n return ch !== '=' && ch !== ';' && ch !== ','\n }\n\n while (pos < cookiesString.length) {\n start = pos\n cookiesSeparatorFound = false\n\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos)\n if (ch === ',') {\n // ',' is a cookie separator if we have later first '=', not ';' or ','\n lastComma = pos\n pos += 1\n\n skipWhitespace()\n nextStart = pos\n\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1\n }\n\n // currently special character\n if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') {\n // we found cookies separator\n cookiesSeparatorFound = true\n // pos is inside the next cookie, so back up and return it.\n pos = nextStart\n cookiesStrings.push(cookiesString.substring(start, lastComma))\n start = pos\n } else {\n // in param ',' or param separator ';',\n // we continue from that comma\n pos = lastComma + 1\n }\n } else {\n pos += 1\n }\n }\n\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length))\n }\n }\n\n return cookiesStrings\n}\n\n/**\n * Converts a Headers object to a Node.js OutgoingHttpHeaders object. This is\n * required to support the set-cookie header, which may have multiple values.\n *\n * @param headers the headers object to convert\n * @returns the converted headers object\n */\nexport function toNodeOutgoingHttpHeaders(\n headers: Headers\n): OutgoingHttpHeaders {\n const nodeHeaders: OutgoingHttpHeaders = {}\n const cookies: string[] = []\n if (headers) {\n for (const [key, value] of headers.entries()) {\n if (key.toLowerCase() === 'set-cookie') {\n // We may have gotten a comma joined string of cookies, or multiple\n // set-cookie headers. We need to merge them into one header array\n // to represent all the cookies.\n cookies.push(...splitCookiesString(value))\n nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies\n } else {\n nodeHeaders[key] = value\n }\n }\n }\n return nodeHeaders\n}\n\n/**\n * Validate the correctness of a user-provided URL.\n */\nexport function validateURL(url: string | URL): string {\n try {\n return String(new URL(String(url)))\n } catch (error: any) {\n throw new Error(\n `URL is malformed \"${String(\n url\n )}\". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`,\n { cause: error }\n )\n }\n}\n\n/**\n * Normalizes `nxtP` and `nxtI` query param values to remove the prefix.\n * This function does not mutate the input key.\n */\nexport function normalizeNextQueryParam(key: string): null | string {\n const prefixes = [NEXT_QUERY_PARAM_PREFIX, NEXT_INTERCEPTION_MARKER_PREFIX]\n for (const prefix of prefixes) {\n if (key !== prefix && key.startsWith(prefix)) {\n return key.substring(prefix.length)\n }\n }\n return null\n}\n","export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n","import type { WorkStore } from '../app-render/work-async-storage.external'\n\n/** Run a callback, and execute any *new* revalidations added during its runtime. */\nexport async function withExecuteRevalidates<T>(\n store: WorkStore | undefined,\n callback: () => Promise<T>\n): Promise<T> {\n if (!store) {\n return callback()\n }\n // If we executed any revalidates during the request, then we don't want to execute them again.\n // save the state so we can check if anything changed after we're done running callbacks.\n const savedRevalidationState = cloneRevalidationState(store)\n try {\n return await callback()\n } finally {\n // Check if we have any new revalidates, and if so, wait until they are all resolved.\n const newRevalidates = diffRevalidationState(\n savedRevalidationState,\n cloneRevalidationState(store)\n )\n await executeRevalidates(store, newRevalidates)\n }\n}\n\ntype RevalidationState = Required<\n Pick<\n WorkStore,\n 'revalidatedTags' | 'pendingRevalidates' | 'pendingRevalidateWrites'\n >\n>\n\nfunction cloneRevalidationState(store: WorkStore): RevalidationState {\n return {\n revalidatedTags: store.revalidatedTags ? [...store.revalidatedTags] : [],\n pendingRevalidates: { ...store.pendingRevalidates },\n pendingRevalidateWrites: store.pendingRevalidateWrites\n ? [...store.pendingRevalidateWrites]\n : [],\n }\n}\n\nfunction diffRevalidationState(\n prev: RevalidationState,\n curr: RevalidationState\n): RevalidationState {\n const prevTags = new Set(prev.revalidatedTags)\n const prevRevalidateWrites = new Set(prev.pendingRevalidateWrites)\n return {\n revalidatedTags: curr.revalidatedTags.filter((tag) => !prevTags.has(tag)),\n pendingRevalidates: Object.fromEntries(\n Object.entries(curr.pendingRevalidates).filter(\n ([key]) => !(key in prev.pendingRevalidates)\n )\n ),\n pendingRevalidateWrites: curr.pendingRevalidateWrites.filter(\n (promise) => !prevRevalidateWrites.has(promise)\n ),\n }\n}\n\nasync function executeRevalidates(\n workStore: WorkStore,\n {\n revalidatedTags,\n pendingRevalidates,\n pendingRevalidateWrites,\n }: RevalidationState\n) {\n return Promise.all([\n workStore.incrementalCache?.revalidateTag(revalidatedTags),\n ...Object.values(pendingRevalidates),\n ...pendingRevalidateWrites,\n ])\n}\n","import type { AsyncLocalStorage } from 'async_hooks'\n\nconst sharedAsyncLocalStorageNotAvailableError = new Error(\n 'Invariant: AsyncLocalStorage accessed in runtime where it is not available'\n)\n\nclass FakeAsyncLocalStorage<Store extends {}>\n implements AsyncLocalStorage<Store>\n{\n disable(): void {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n getStore(): Store | undefined {\n // This fake implementation of AsyncLocalStorage always returns `undefined`.\n return undefined\n }\n\n run<R>(): R {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n exit<R>(): R {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n enterWith(): void {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n static bind<T>(fn: T): T {\n return fn\n }\n}\n\nconst maybeGlobalAsyncLocalStorage =\n typeof globalThis !== 'undefined' && (globalThis as any).AsyncLocalStorage\n\nexport function createAsyncLocalStorage<\n Store extends {},\n>(): AsyncLocalStorage<Store> {\n if (maybeGlobalAsyncLocalStorage) {\n return new maybeGlobalAsyncLocalStorage()\n }\n return new FakeAsyncLocalStorage()\n}\n\nexport function bindSnapshot<T>(fn: T): T {\n if (maybeGlobalAsyncLocalStorage) {\n return maybeGlobalAsyncLocalStorage.bind(fn)\n }\n return FakeAsyncLocalStorage.bind(fn)\n}\n\nexport function createSnapshot(): <R, TArgs extends any[]>(\n fn: (...args: TArgs) => R,\n ...args: TArgs\n) => R {\n if (maybeGlobalAsyncLocalStorage) {\n return maybeGlobalAsyncLocalStorage.snapshot()\n }\n return function (fn: any, ...args: any[]) {\n return fn(...args)\n }\n}\n","import PromiseQueue from 'next/dist/compiled/p-queue'\nimport type { RequestLifecycleOpts } from '../base-server'\nimport type { AfterCallback, AfterTask } from './after'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { isThenable } from '../../shared/lib/is-thenable'\nimport { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport { withExecuteRevalidates } from './revalidation-utils'\nimport { bindSnapshot } from '../app-render/async-local-storage'\nimport {\n workUnitAsyncStorage,\n type WorkUnitStore,\n} from '../app-render/work-unit-async-storage.external'\nimport { afterTaskAsyncStorage } from '../app-render/after-task-async-storage.external'\n\nexport type AfterContextOpts = {\n waitUntil: RequestLifecycleOpts['waitUntil'] | undefined\n onClose: RequestLifecycleOpts['onClose']\n onTaskError: RequestLifecycleOpts['onAfterTaskError'] | undefined\n}\n\nexport class AfterContext {\n private waitUntil: RequestLifecycleOpts['waitUntil'] | undefined\n private onClose: RequestLifecycleOpts['onClose']\n private onTaskError: RequestLifecycleOpts['onAfterTaskError'] | undefined\n\n private runCallbacksOnClosePromise: Promise<void> | undefined\n private callbackQueue: PromiseQueue\n private workUnitStores = new Set<WorkUnitStore>()\n\n constructor({ waitUntil, onClose, onTaskError }: AfterContextOpts) {\n this.waitUntil = waitUntil\n this.onClose = onClose\n this.onTaskError = onTaskError\n\n this.callbackQueue = new PromiseQueue()\n this.callbackQueue.pause()\n }\n\n public after(task: AfterTask): void {\n if (isThenable(task)) {\n if (!this.waitUntil) {\n errorWaitUntilNotAvailable()\n }\n this.waitUntil(\n task.catch((error) => this.reportTaskError('promise', error))\n )\n } else if (typeof task === 'function') {\n // TODO(after): implement tracing\n this.addCallback(task)\n } else {\n throw new Error('`after()`: Argument must be a promise or a function')\n }\n }\n\n private addCallback(callback: AfterCallback) {\n // if something is wrong, throw synchronously, bubbling up to the `after` callsite.\n if (!this.waitUntil) {\n errorWaitUntilNotAvailable()\n }\n\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n this.workUnitStores.add(workUnitStore)\n }\n\n const afterTaskStore = afterTaskAsyncStorage.getStore()\n\n // This is used for checking if request APIs can be called inside `after`.\n // Note that we need to check the phase in which the *topmost* `after` was called (which should be \"action\"),\n // not the current phase (which might be \"after\" if we're in a nested after).\n // Otherwise, we might allow `after(() => headers())`, but not `after(() => after(() => headers()))`.\n const rootTaskSpawnPhase = afterTaskStore\n ? afterTaskStore.rootTaskSpawnPhase // nested after\n : workUnitStore?.phase // topmost after\n\n // this should only happen once.\n if (!this.runCallbacksOnClosePromise) {\n this.runCallbacksOnClosePromise = this.runCallbacksOnClose()\n this.waitUntil(this.runCallbacksOnClosePromise)\n }\n\n // Bind the callback to the current execution context (i.e. preserve all currently available ALS-es).\n // We do this because we want all of these to be equivalent in every regard except timing:\n // after(() => x())\n // after(x())\n // await x()\n const wrappedCallback = bindSnapshot(async () => {\n try {\n await afterTaskAsyncStorage.run({ rootTaskSpawnPhase }, () =>\n callback()\n )\n } catch (error) {\n this.reportTaskError('function', error)\n }\n })\n\n this.callbackQueue.add(wrappedCallback)\n }\n\n private async runCallbacksOnClose() {\n await new Promise<void>((resolve) => this.onClose!(resolve))\n return this.runCallbacks()\n }\n\n private async runCallbacks(): Promise<void> {\n if (this.callbackQueue.size === 0) return\n\n for (const workUnitStore of this.workUnitStores) {\n workUnitStore.phase = 'after'\n }\n\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError('Missing workStore in AfterContext.runCallbacks')\n }\n\n return withExecuteRevalidates(workStore, () => {\n this.callbackQueue.start()\n return this.callbackQueue.onIdle()\n })\n }\n\n private reportTaskError(taskKind: 'promise' | 'function', error: unknown) {\n // TODO(after): this is fine for now, but will need better intergration with our error reporting.\n // TODO(after): should we log this if we have a onTaskError callback?\n console.error(\n taskKind === 'promise'\n ? `A promise passed to \\`after()\\` rejected:`\n : `An error occurred in a function passed to \\`after()\\`:`,\n error\n )\n if (this.onTaskError) {\n // this is very defensive, but we really don't want anything to blow up in an error handler\n try {\n this.onTaskError?.(error)\n } catch (handlerError) {\n console.error(\n new InvariantError(\n '`onTaskError` threw while handling an error thrown from an `after` task',\n {\n cause: handlerError,\n }\n )\n )\n }\n }\n }\n}\n\nfunction errorWaitUntilNotAvailable(): never {\n throw new Error(\n '`after()` will not work correctly, because `waitUntil` is not available in the current environment.'\n )\n}\n","/**\n * Check to see if a value is Thenable.\n *\n * @param promise the maybe-thenable value\n * @returns true if the value is thenable\n */\nexport function isThenable<T = unknown>(\n promise: Promise<T> | T\n): promise is Promise<T> {\n return (\n promise !== null &&\n typeof promise === 'object' &&\n 'then' in promise &&\n typeof promise.then === 'function'\n )\n}\n","import type { Segment } from '../../server/app-render/types'\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function addSearchParamsIfPageSegment(\n segment: Segment,\n searchParams: Record<string, string | string[] | undefined>\n) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY)\n\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams)\n return stringifiedQuery !== '{}'\n ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery\n : PAGE_SEGMENT_KEY\n }\n\n return segment\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\n","/**\n * List of valid HTTP methods that can be implemented by Next.js's Custom App\n * Routes.\n */\nexport const HTTP_METHODS = [\n 'GET',\n 'HEAD',\n 'OPTIONS',\n 'POST',\n 'PUT',\n 'DELETE',\n 'PATCH',\n] as const\n\n/**\n * A type representing the valid HTTP methods that can be implemented by\n * Next.js's Custom App Routes.\n */\nexport type HTTP_METHOD = (typeof HTTP_METHODS)[number]\n\n/**\n * Checks to see if the passed string is an HTTP method. Note that this is case\n * sensitive.\n *\n * @param maybeMethod the string that may be an HTTP method\n * @returns true if the string is an HTTP method\n */\nexport function isHTTPMethod(maybeMethod: string): maybeMethod is HTTP_METHOD {\n return HTTP_METHODS.includes(maybeMethod as HTTP_METHOD)\n}\n","import { NEXT_CACHE_IMPLICIT_TAG_ID } from '../../lib/constants'\nimport type { FallbackRouteParams } from '../request/fallback-params'\n\nconst getDerivedTags = (pathname: string): string[] => {\n const derivedTags: string[] = [`/layout`]\n\n // we automatically add the current path segments as tags\n // for revalidatePath handling\n if (pathname.startsWith('/')) {\n const pathnameParts = pathname.split('/')\n\n for (let i = 1; i < pathnameParts.length + 1; i++) {\n let curPathname = pathnameParts.slice(0, i).join('/')\n\n if (curPathname) {\n // all derived tags other than the page are layout tags\n if (!curPathname.endsWith('/page') && !curPathname.endsWith('/route')) {\n curPathname = `${curPathname}${\n !curPathname.endsWith('/') ? '/' : ''\n }layout`\n }\n derivedTags.push(curPathname)\n }\n }\n }\n return derivedTags\n}\n\nexport function getImplicitTags(\n page: string,\n url: {\n pathname: string\n search?: string\n },\n fallbackRouteParams: null | FallbackRouteParams\n) {\n // TODO: Cache the result\n const newTags: string[] = []\n const hasFallbackRouteParams =\n fallbackRouteParams && fallbackRouteParams.size > 0\n\n // Add the derived tags from the page.\n const derivedTags = getDerivedTags(page)\n for (let tag of derivedTags) {\n tag = `${NEXT_CACHE_IMPLICIT_TAG_ID}${tag}`\n newTags.push(tag)\n }\n\n // Add the tags from the pathname. If the route has unknown params, we don't\n // want to add the pathname as a tag, as it will be invalid.\n if (url.pathname && !hasFallbackRouteParams) {\n const tag = `${NEXT_CACHE_IMPLICIT_TAG_ID}${url.pathname}`\n newTags.push(tag)\n }\n\n return newTags\n}\n","const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE'\n\nexport class DynamicServerError extends Error {\n digest: typeof DYNAMIC_ERROR_CODE = DYNAMIC_ERROR_CODE\n\n constructor(public readonly description: string) {\n super(`Dynamic server usage: ${description}`)\n }\n}\n\nexport function isDynamicServerError(err: unknown): err is DynamicServerError {\n if (\n typeof err !== 'object' ||\n err === null ||\n !('digest' in err) ||\n typeof err.digest !== 'string'\n ) {\n return false\n }\n\n return err.digest === DYNAMIC_ERROR_CODE\n}\n","const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT'\n\nexport class StaticGenBailoutError extends Error {\n public readonly code = NEXT_STATIC_GEN_BAILOUT\n}\n\nexport function isStaticGenBailoutError(\n error: unknown\n): error is StaticGenBailoutError {\n if (typeof error !== 'object' || error === null || !('code' in error)) {\n return false\n }\n\n return error.code === NEXT_STATIC_GEN_BAILOUT\n}\n","export function isHangingPromiseRejectionError(\n err: unknown\n): err is HangingPromiseRejectionError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === HANGING_PROMISE_REJECTION\n}\n\nconst HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'\n\nclass HangingPromiseRejectionError extends Error {\n public readonly digest = HANGING_PROMISE_REJECTION\n\n constructor(public readonly expression: string) {\n super(\n `During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \\`setTimeout\\`, \\`after\\`, or similar functions you may observe this error and you should handle it in that context.`\n )\n }\n}\n\n/**\n * This function constructs a promise that will never resolve. This is primarily\n * useful for dynamicIO where we use promise resolution timing to determine which\n * parts of a render can be included in a prerender.\n *\n * @internal\n */\nexport function makeHangingPromise<T>(\n signal: AbortSignal,\n expression: string\n): Promise<T> {\n const hangingPromise = new Promise<T>((_, reject) => {\n signal.addEventListener(\n 'abort',\n () => {\n reject(new HangingPromiseRejectionError(expression))\n },\n { once: true }\n )\n })\n // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so\n // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct\n // your own promise out of it you'll need to ensure you handle the error when it rejects.\n hangingPromise.catch(ignoreReject)\n return hangingPromise\n}\n\nfunction ignoreReject() {}\n","export type ScheduledFn<T = void> = () => T | PromiseLike<T>\nexport type SchedulerFn<T = void> = (cb: ScheduledFn<T>) => void\n\n/**\n * Schedules a function to be called on the next tick after the other promises\n * have been resolved.\n *\n * @param cb the function to schedule\n */\nexport const scheduleOnNextTick = <T = void>(cb: ScheduledFn<T>): void => {\n // We use Promise.resolve().then() here so that the operation is scheduled at\n // the end of the promise job queue, we then add it to the next process tick\n // to ensure it's evaluated afterwards.\n //\n // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255\n //\n Promise.resolve().then(() => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n process.nextTick(cb)\n }\n })\n}\n\n/**\n * Schedules a function to be called using `setImmediate` or `setTimeout` if\n * `setImmediate` is not available (like in the Edge runtime).\n *\n * @param cb the function to schedule\n */\nexport const scheduleImmediate = <T = void>(cb: ScheduledFn<T>): void => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n setImmediate(cb)\n }\n}\n\n/**\n * returns a promise than resolves in a future task. There is no guarantee that the task it resolves in\n * will be the next task but if you await it you can at least be sure that the current task is over and\n * most usefully that the entire microtask queue of the current task has been emptied.\n */\nexport function atLeastOneTask() {\n return new Promise<void>((resolve) => scheduleImmediate(resolve))\n}\n\n/**\n * This utility function is extracted to make it easier to find places where we are doing\n * specific timing tricks to try to schedule work after React has rendered. This is especially\n * important at the moment because Next.js uses the edge builds of React which use setTimeout to\n * schedule work when you might expect that something like setImmediate would do the trick.\n *\n * Long term we should switch to the node versions of React rendering when possible and then\n * update this to use setImmediate rather than setTimeout\n */\nexport function waitAtLeastOneReactRenderTask(): Promise<void> {\n if (process.env.NEXT_RUNTIME === 'edge') {\n return new Promise((r) => setTimeout(r, 0))\n } else {\n return new Promise((r) => setImmediate(r))\n }\n}\n","/**\n * The functions provided by this module are used to communicate certain properties\n * about the currently running code so that Next.js can make decisions on how to handle\n * the current execution in different rendering modes such as pre-rendering, resuming, and SSR.\n *\n * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering.\n * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts\n * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of\n * Dynamic indications.\n *\n * The first is simply an intention to be dynamic. unstable_noStore is an example of this where\n * the currently executing code simply declares that the current scope is dynamic but if you use it\n * inside unstable_cache it can still be cached. This type of indication can be removed if we ever\n * make the default dynamic to begin with because the only way you would ever be static is inside\n * a cache scope which this indication does not affect.\n *\n * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic\n * because it means that it is inappropriate to cache this at all. using a dynamic data source inside\n * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should\n * read that data outside the cache and pass it in as an argument to the cached function.\n */\n\nimport type { WorkStore } from '../app-render/work-async-storage.external'\nimport type {\n WorkUnitStore,\n RequestStore,\n PrerenderStoreLegacy,\n PrerenderStoreModern,\n} from '../app-render/work-unit-async-storage.external'\n\n// Once postpone is in stable we should switch to importing the postpone export directly\nimport React from 'react'\n\nimport { DynamicServerError } from '../../client/components/hooks-server-context'\nimport { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport { workUnitAsyncStorage } from './work-unit-async-storage.external'\nimport { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport { makeHangingPromise } from '../dynamic-rendering-utils'\nimport {\n METADATA_BOUNDARY_NAME,\n VIEWPORT_BOUNDARY_NAME,\n OUTLET_BOUNDARY_NAME,\n} from '../../lib/metadata/metadata-constants'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\n\nconst hasPostpone = typeof React.unstable_postpone === 'function'\n\nexport type DynamicAccess = {\n /**\n * If debugging, this will contain the stack trace of where the dynamic access\n * occurred. This is used to provide more information to the user about why\n * their page is being rendered dynamically.\n */\n stack?: string\n\n /**\n * The expression that was accessed dynamically.\n */\n expression: string\n}\n\n// Stores dynamic reasons used during an RSC render.\nexport type DynamicTrackingState = {\n /**\n * When true, stack information will also be tracked during dynamic access.\n */\n readonly isDebugDynamicAccesses: boolean | undefined\n\n /**\n * The dynamic accesses that occurred during the render.\n */\n readonly dynamicAccesses: Array<DynamicAccess>\n\n syncDynamicExpression: undefined | string\n syncDynamicErrorWithStack: null | Error\n // Dev only\n syncDynamicLogged?: boolean\n}\n\n// Stores dynamic reasons used during an SSR render.\nexport type DynamicValidationState = {\n hasSuspendedDynamic: boolean\n hasDynamicMetadata: boolean\n hasDynamicViewport: boolean\n hasSyncDynamicErrors: boolean\n dynamicErrors: Array<Error>\n}\n\nexport function createDynamicTrackingState(\n isDebugDynamicAccesses: boolean | undefined\n): DynamicTrackingState {\n return {\n isDebugDynamicAccesses,\n dynamicAccesses: [],\n syncDynamicExpression: undefined,\n syncDynamicErrorWithStack: null,\n }\n}\n\nexport function createDynamicValidationState(): DynamicValidationState {\n return {\n hasSuspendedDynamic: false,\n hasDynamicMetadata: false,\n hasDynamicViewport: false,\n hasSyncDynamicErrors: false,\n dynamicErrors: [],\n }\n}\n\nexport function getFirstDynamicReason(\n trackingState: DynamicTrackingState\n): undefined | string {\n return trackingState.dynamicAccesses[0]?.expression\n}\n\n/**\n * This function communicates that the current scope should be treated as dynamic.\n *\n * In most cases this function is a no-op but if called during\n * a PPR prerender it will postpone the current sub-tree and calling\n * it during a normal prerender will cause the entire prerender to abort\n */\nexport function markCurrentScopeAsDynamic(\n store: WorkStore,\n workUnitStore: undefined | Exclude<WorkUnitStore, PrerenderStoreModern>,\n expression: string\n): void {\n if (workUnitStore) {\n if (\n workUnitStore.type === 'cache' ||\n workUnitStore.type === 'unstable-cache'\n ) {\n // inside cache scopes marking a scope as dynamic has no effect because the outer cache scope\n // creates a cache boundary. This is subtly different from reading a dynamic data source which is\n // forbidden inside a cache scope.\n return\n }\n }\n\n // If we're forcing dynamic rendering or we're forcing static rendering, we\n // don't need to do anything here because the entire page is already dynamic\n // or it's static and it should not throw or postpone here.\n if (store.forceDynamic || store.forceStatic) return\n\n if (store.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${store.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n if (workUnitStore.type === 'prerender-ppr') {\n postponeWithTracking(\n store.route,\n expression,\n workUnitStore.dynamicTracking\n )\n } else if (workUnitStore.type === 'prerender-legacy') {\n workUnitStore.revalidate = 0\n\n // We aren't prerendering but we are generating a static page. We need to bail out of static generation\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n } else if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore &&\n workUnitStore.type === 'request'\n ) {\n workUnitStore.usedDynamic = true\n }\n }\n}\n\n/**\n * This function communicates that some dynamic path parameter was read. This\n * differs from the more general `trackDynamicDataAccessed` in that it is will\n * not error when `dynamic = \"error\"` is set.\n *\n * @param store The static generation store\n * @param expression The expression that was accessed dynamically\n */\nexport function trackFallbackParamAccessed(\n store: WorkStore,\n expression: string\n): void {\n const prerenderStore = workUnitAsyncStorage.getStore()\n if (!prerenderStore || prerenderStore.type !== 'prerender-ppr') return\n\n postponeWithTracking(store.route, expression, prerenderStore.dynamicTracking)\n}\n\n/**\n * This function is meant to be used when prerendering without dynamicIO or PPR.\n * When called during a build it will cause Next.js to consider the route as dynamic.\n *\n * @internal\n */\nexport function throwToInterruptStaticGeneration(\n expression: string,\n store: WorkStore,\n prerenderStore: PrerenderStoreLegacy\n): never {\n // We aren't prerendering but we are generating a static page. We need to bail out of static generation\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n\n prerenderStore.revalidate = 0\n\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n}\n\n/**\n * This function should be used to track whether something dynamic happened even when\n * we are in a dynamic render. This is useful for Dev where all renders are dynamic but\n * we still track whether dynamic APIs were accessed for helpful messaging\n *\n * @internal\n */\nexport function trackDynamicDataInDynamicRender(\n _store: WorkStore,\n workUnitStore: void | WorkUnitStore\n) {\n if (workUnitStore) {\n if (\n workUnitStore.type === 'cache' ||\n workUnitStore.type === 'unstable-cache'\n ) {\n // inside cache scopes marking a scope as dynamic has no effect because the outer cache scope\n // creates a cache boundary. This is subtly different from reading a dynamic data source which is\n // forbidden inside a cache scope.\n return\n }\n if (\n workUnitStore.type === 'prerender' ||\n workUnitStore.type === 'prerender-legacy'\n ) {\n workUnitStore.revalidate = 0\n }\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.type === 'request'\n ) {\n workUnitStore.usedDynamic = true\n }\n }\n}\n\n// Despite it's name we don't actually abort unless we have a controller to call abort on\n// There are times when we let a prerender run long to discover caches where we want the semantics\n// of tracking dynamic access without terminating the prerender early\nfunction abortOnSynchronousDynamicDataAccess(\n route: string,\n expression: string,\n prerenderStore: PrerenderStoreModern\n): void {\n const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n\n const error = createPrerenderInterruptedError(reason)\n\n prerenderStore.controller.abort(error)\n\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n // When we aren't debugging, we don't need to create another error for the\n // stack trace.\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nexport function abortOnSynchronousPlatformIOAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): void {\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n if (dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicExpression = expression\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n }\n }\n return abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n}\n\nexport function trackSynchronousPlatformIOAccessInDev(\n requestStore: RequestStore\n): void {\n // We don't actually have a controller to abort but we do the semantic equivalent by\n // advancing the request store out of prerender mode\n requestStore.prerenderPhase = false\n}\n\n/**\n * use this function when prerendering with dynamicIO. If we are doing a\n * prospective prerender we don't actually abort because we want to discover\n * all caches for the shell. If this is the actual prerender we do abort.\n *\n * This function accepts a prerenderStore but the caller should ensure we're\n * actually running in dynamicIO mode.\n *\n * @internal\n */\nexport function abortAndThrowOnSynchronousRequestDataAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): never {\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n if (dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicExpression = expression\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n if (prerenderStore.validating === true) {\n // We always log Request Access in dev at the point of calling the function\n // So we mark the dynamic validation as not requiring it to be printed\n dynamicTracking.syncDynamicLogged = true\n }\n }\n }\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n throw createPrerenderInterruptedError(\n `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n )\n}\n\n// For now these implementations are the same so we just reexport\nexport const trackSynchronousRequestDataAccessInDev =\n trackSynchronousPlatformIOAccessInDev\n\n/**\n * This component will call `React.postpone` that throws the postponed error.\n */\ntype PostponeProps = {\n reason: string\n route: string\n}\nexport function Postpone({ reason, route }: PostponeProps): never {\n const prerenderStore = workUnitAsyncStorage.getStore()\n const dynamicTracking =\n prerenderStore && prerenderStore.type === 'prerender-ppr'\n ? prerenderStore.dynamicTracking\n : null\n postponeWithTracking(route, reason, dynamicTracking)\n}\n\nexport function postponeWithTracking(\n route: string,\n expression: string,\n dynamicTracking: null | DynamicTrackingState\n): never {\n assertPostpone()\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n // When we aren't debugging, we don't need to create another error for the\n // stack trace.\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n\n React.unstable_postpone(createPostponeReason(route, expression))\n}\n\nfunction createPostponeReason(route: string, expression: string) {\n return (\n `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. ` +\n `React throws this special object to indicate where. It should not be caught by ` +\n `your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`\n )\n}\n\nexport function isDynamicPostpone(err: unknown) {\n if (\n typeof err === 'object' &&\n err !== null &&\n typeof (err as any).message === 'string'\n ) {\n return isDynamicPostponeReason((err as any).message)\n }\n return false\n}\n\nfunction isDynamicPostponeReason(reason: string) {\n return (\n reason.includes(\n 'needs to bail out of prerendering at this point because it used'\n ) &&\n reason.includes(\n 'Learn more: https://nextjs.org/docs/messages/ppr-caught-error'\n )\n )\n}\n\nif (isDynamicPostponeReason(createPostponeReason('%%%', '^^^')) === false) {\n throw new Error(\n 'Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js'\n )\n}\n\nconst NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'\n\nfunction createPrerenderInterruptedError(message: string): Error {\n const error = new Error(message)\n ;(error as any).digest = NEXT_PRERENDER_INTERRUPTED\n return error\n}\n\ntype DigestError = Error & {\n digest: string\n}\n\nexport function isPrerenderInterruptedError(\n error: unknown\n): error is DigestError {\n return (\n typeof error === 'object' &&\n error !== null &&\n (error as any).digest === NEXT_PRERENDER_INTERRUPTED &&\n 'name' in error &&\n 'message' in error &&\n error instanceof Error\n )\n}\n\nexport function accessedDynamicData(\n dynamicAccesses: Array<DynamicAccess>\n): boolean {\n return dynamicAccesses.length > 0\n}\n\nexport function consumeDynamicAccess(\n serverDynamic: DynamicTrackingState,\n clientDynamic: DynamicTrackingState\n): DynamicTrackingState['dynamicAccesses'] {\n // We mutate because we only call this once we are no longer writing\n // to the dynamicTrackingState and it's more efficient than creating a new\n // array.\n serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses)\n return serverDynamic.dynamicAccesses\n}\n\nexport function formatDynamicAPIAccesses(\n dynamicAccesses: Array<DynamicAccess>\n): string[] {\n return dynamicAccesses\n .filter(\n (access): access is Required<DynamicAccess> =>\n typeof access.stack === 'string' && access.stack.length > 0\n )\n .map(({ expression, stack }) => {\n stack = stack\n .split('\\n')\n // Remove the \"Error: \" prefix from the first line of the stack trace as\n // well as the first 4 lines of the stack trace which is the distance\n // from the user code and the `new Error().stack` call.\n .slice(4)\n .filter((line) => {\n // Exclude Next.js internals from the stack trace.\n if (line.includes('node_modules/next/')) {\n return false\n }\n\n // Exclude anonymous functions from the stack trace.\n if (line.includes(' (<anonymous>)')) {\n return false\n }\n\n // Exclude Node.js internals from the stack trace.\n if (line.includes(' (node:')) {\n return false\n }\n\n return true\n })\n .join('\\n')\n return `Dynamic API Usage Debug - ${expression}:\\n${stack}`\n })\n}\n\nfunction assertPostpone() {\n if (!hasPostpone) {\n throw new Error(\n `Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js`\n )\n }\n}\n\n/**\n * This is a bit of a hack to allow us to abort a render using a Postpone instance instead of an Error which changes React's\n * abort semantics slightly.\n */\nexport function createPostponedAbortSignal(reason: string): AbortSignal {\n assertPostpone()\n const controller = new AbortController()\n // We get our hands on a postpone instance by calling postpone and catching the throw\n try {\n React.unstable_postpone(reason)\n } catch (x: unknown) {\n controller.abort(x)\n }\n return controller.signal\n}\n\n/**\n * In a prerender, we may end up with hanging Promises as inputs due them\n * stalling on connection() or because they're loading dynamic data. In that\n * case we need to abort the encoding of arguments since they'll never complete.\n */\nexport function createHangingInputAbortSignal(\n workUnitStore: PrerenderStoreModern\n): AbortSignal {\n const controller = new AbortController()\n\n if (workUnitStore.cacheSignal) {\n // If we have a cacheSignal it means we're in a prospective render. If the input\n // we're waiting on is coming from another cache, we do want to wait for it so that\n // we can resolve this cache entry too.\n workUnitStore.cacheSignal.inputReady().then(() => {\n controller.abort()\n })\n } else {\n // Otherwise we're in the final render and we should already have all our caches\n // filled. We might still be waiting on some microtasks so we wait one tick before\n // giving up. When we give up, we still want to render the content of this cache\n // as deeply as we can so that we can suspend as deeply as possible in the tree\n // or not at all if we don't end up waiting for the input.\n scheduleOnNextTick(() => controller.abort())\n }\n\n return controller.signal\n}\n\nexport function annotateDynamicAccess(\n expression: string,\n prerenderStore: PrerenderStoreModern\n) {\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nexport function useDynamicRouteParams(expression: string) {\n if (typeof window === 'undefined') {\n const workStore = workAsyncStorage.getStore()\n\n if (\n workStore &&\n workStore.isStaticGeneration &&\n workStore.fallbackRouteParams &&\n workStore.fallbackRouteParams.size > 0\n ) {\n // There are fallback route params, we should track these as dynamic\n // accesses.\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n // We're prerendering with dynamicIO or PPR or both\n if (workUnitStore.type === 'prerender') {\n // We are in a prerender with dynamicIO semantics\n // We are going to hang here and never resolve. This will cause the currently\n // rendering component to effectively be a dynamic hole\n React.use(makeHangingPromise(workUnitStore.renderSignal, expression))\n } else if (workUnitStore.type === 'prerender-ppr') {\n // We're prerendering with PPR\n postponeWithTracking(\n workStore.route,\n expression,\n workUnitStore.dynamicTracking\n )\n } else if (workUnitStore.type === 'prerender-legacy') {\n throwToInterruptStaticGeneration(expression, workStore, workUnitStore)\n }\n }\n }\n }\n}\n\nconst hasSuspenseRegex = /\\n\\s+at Suspense \\(<anonymous>\\)/\nconst hasMetadataRegex = new RegExp(\n `\\\\n\\\\s+at ${METADATA_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasViewportRegex = new RegExp(\n `\\\\n\\\\s+at ${VIEWPORT_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasOutletRegex = new RegExp(`\\\\n\\\\s+at ${OUTLET_BOUNDARY_NAME}[\\\\n\\\\s]`)\n\nexport function trackAllowedDynamicAccess(\n route: string,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState,\n clientDynamic: DynamicTrackingState\n) {\n if (hasOutletRegex.test(componentStack)) {\n // We don't need to track that this is dynamic. It is only so when something else is also dynamic.\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n dynamicValidation.hasDynamicMetadata = true\n return\n } else if (hasViewportRegex.test(componentStack)) {\n dynamicValidation.hasDynamicViewport = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n dynamicValidation.hasSuspendedDynamic = true\n return\n } else if (\n serverDynamic.syncDynamicErrorWithStack ||\n clientDynamic.syncDynamicErrorWithStack\n ) {\n dynamicValidation.hasSyncDynamicErrors = true\n return\n } else {\n const message = `Route \"${route}\": A component accessed data, headers, params, searchParams, or a short-lived cache without a Suspense boundary nor a \"use cache\" above it. We don't have the exact line number added to error messages yet but you can see which component in the stack below. See more info: https://nextjs.org/docs/messages/next-prerender-missing-suspense`\n const error = createErrorWithComponentStack(message, componentStack)\n dynamicValidation.dynamicErrors.push(error)\n return\n }\n}\n\nfunction createErrorWithComponentStack(\n message: string,\n componentStack: string\n) {\n const error = new Error(message)\n error.stack = 'Error: ' + message + componentStack\n return error\n}\n\nexport function throwIfDisallowedDynamic(\n route: string,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState,\n clientDynamic: DynamicTrackingState\n): void {\n let syncError: null | Error\n let syncExpression: undefined | string\n let syncLogged: boolean\n if (serverDynamic.syncDynamicErrorWithStack) {\n syncError = serverDynamic.syncDynamicErrorWithStack\n syncExpression = serverDynamic.syncDynamicExpression!\n syncLogged = serverDynamic.syncDynamicLogged === true\n } else if (clientDynamic.syncDynamicErrorWithStack) {\n syncError = clientDynamic.syncDynamicErrorWithStack\n syncExpression = clientDynamic.syncDynamicExpression!\n syncLogged = clientDynamic.syncDynamicLogged === true\n } else {\n syncError = null\n syncExpression = undefined\n syncLogged = false\n }\n\n if (dynamicValidation.hasSyncDynamicErrors && syncError) {\n if (!syncLogged) {\n // In dev we already log errors about sync dynamic access. But during builds we need to ensure\n // the offending sync error is logged before we exit the build\n console.error(syncError)\n }\n // The actual error should have been logged when the sync access ocurred\n throw new StaticGenBailoutError()\n }\n\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length) {\n for (let i = 0; i < dynamicErrors.length; i++) {\n console.error(dynamicErrors[i])\n }\n\n throw new StaticGenBailoutError()\n }\n\n if (!dynamicValidation.hasSuspendedDynamic) {\n if (dynamicValidation.hasDynamicMetadata) {\n if (syncError) {\n console.error(syncError)\n throw new StaticGenBailoutError(\n `Route \"${route}\" has a \\`generateMetadata\\` that could not finish rendering before ${syncExpression} was used. Follow the instructions in the error for this expression to resolve.`\n )\n }\n throw new StaticGenBailoutError(\n `Route \"${route}\" has a \\`generateMetadata\\` that depends on Request data (\\`cookies()\\`, etc...) or external data (\\`fetch(...)\\`, etc...) but the rest of the route was static or only used cached data (\\`\"use cache\"\\`). If you expected this route to be prerenderable update your \\`generateMetadata\\` to not use Request data and only use cached external data. Otherwise, add \\`await connection()\\` somewhere within this route to indicate explicitly it should not be prerendered.`\n )\n } else if (dynamicValidation.hasDynamicViewport) {\n if (syncError) {\n console.error(syncError)\n throw new StaticGenBailoutError(\n `Route \"${route}\" has a \\`generateViewport\\` that could not finish rendering before ${syncExpression} was used. Follow the instructions in the error for this expression to resolve.`\n )\n }\n throw new StaticGenBailoutError(\n `Route \"${route}\" has a \\`generateViewport\\` that depends on Request data (\\`cookies()\\`, etc...) or external data (\\`fetch(...)\\`, etc...) but the rest of the route was static or only used cached data (\\`\"use cache\"\\`). If you expected this route to be prerenderable update your \\`generateViewport\\` to not use Request data and only use cached external data. Otherwise, add \\`await connection()\\` somewhere within this route to indicate explicitly it should not be prerendered.`\n )\n }\n }\n}\n","/**\n * Clones a response by teeing the body so we can return two independent\n * ReadableStreams from it. This avoids the bug in the undici library around\n * response cloning.\n *\n * After cloning, the original response's body will be consumed and closed.\n *\n * @see https://github.com/vercel/next.js/pull/73274\n *\n * @param original - The original response to clone.\n * @returns A tuple containing two independent clones of the original response.\n */\nexport function cloneResponse(original: Response): [Response, Response] {\n // If the response has no body, then we can just return the original response\n // twice because it's immutable.\n if (!original.body) {\n return [original, original]\n }\n\n const [body1, body2] = original.body.tee()\n\n const cloned1 = new Response(body1, {\n status: original.status,\n statusText: original.statusText,\n headers: original.headers,\n })\n\n Object.defineProperty(cloned1, 'url', {\n value: original.url,\n })\n\n const cloned2 = new Response(body2, {\n status: original.status,\n statusText: original.statusText,\n headers: original.headers,\n })\n\n Object.defineProperty(cloned2, 'url', {\n value: original.url,\n })\n\n return [cloned1, cloned2]\n}\n","import type { OutgoingHttpHeaders } from 'http'\nimport type RenderResult from '../render-result'\nimport type { Revalidate } from '../lib/revalidate'\nimport type { RouteKind } from '../route-kind'\n\nexport interface ResponseCacheBase {\n get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n incrementalCache: IncrementalCache\n /**\n * This is a hint to the cache to help it determine what kind of route\n * this is so it knows where to look up the cache entry from. If not\n * provided it will test the filesystem to check.\n */\n routeKind: RouteKind\n\n /**\n * True if this is a fallback request.\n */\n isFallback?: boolean\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n }\n ): Promise<ResponseCacheEntry | null>\n}\n\n// The server components HMR cache might store other data as well in the future,\n// at which point this should be refactored to a discriminated union type.\nexport interface ServerComponentsHmrCache {\n get(key: string): CachedFetchData | undefined\n set(key: string, data: CachedFetchData): void\n}\n\nexport type CachedFetchData = {\n headers: Record<string, string>\n body: string\n url: string\n status?: number\n}\n\nexport const enum CachedRouteKind {\n APP_PAGE = 'APP_PAGE',\n APP_ROUTE = 'APP_ROUTE',\n PAGES = 'PAGES',\n FETCH = 'FETCH',\n REDIRECT = 'REDIRECT',\n IMAGE = 'IMAGE',\n}\n\nexport interface CachedFetchValue {\n kind: CachedRouteKind.FETCH\n data: CachedFetchData\n // tags are only present with file-system-cache\n // fetch cache stores tags outside of cache entry\n tags?: string[]\n revalidate: number\n}\n\nexport interface CachedRedirectValue {\n kind: CachedRouteKind.REDIRECT\n props: Object\n}\n\nexport interface CachedAppPageValue {\n kind: CachedRouteKind.APP_PAGE\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n html: RenderResult\n rscData: Buffer | undefined\n status: number | undefined\n postponed: string | undefined\n headers: OutgoingHttpHeaders | undefined\n segmentData: Map<string, Buffer> | undefined\n}\n\nexport interface CachedPageValue {\n kind: CachedRouteKind.PAGES\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n html: RenderResult\n pageData: Object\n status: number | undefined\n headers: OutgoingHttpHeaders | undefined\n}\n\nexport interface CachedRouteValue {\n kind: CachedRouteKind.APP_ROUTE\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n body: Buffer\n status: number\n headers: OutgoingHttpHeaders\n}\n\nexport interface CachedImageValue {\n kind: CachedRouteKind.IMAGE\n etag: string\n upstreamEtag: string\n buffer: Buffer\n extension: string\n isMiss?: boolean\n isStale?: boolean\n}\n\nexport interface IncrementalCachedAppPageValue {\n kind: CachedRouteKind.APP_PAGE\n // this needs to be a string since the cache expects to store\n // the string value\n html: string\n rscData: Buffer | undefined\n headers: OutgoingHttpHeaders | undefined\n postponed: string | undefined\n status: number | undefined\n segmentData: Map<string, Buffer> | undefined\n}\n\nexport interface IncrementalCachedPageValue {\n kind: CachedRouteKind.PAGES\n // this needs to be a string since the cache expects to store\n // the string value\n html: string\n pageData: Object\n headers: OutgoingHttpHeaders | undefined\n status: number | undefined\n}\n\nexport type IncrementalCacheEntry = {\n curRevalidate?: Revalidate\n // milliseconds to revalidate after\n revalidateAfter: Revalidate\n // -1 here dictates a blocking revalidate should be used\n isStale?: boolean | -1\n value: IncrementalCacheValue | null\n isFallback: boolean | undefined\n}\n\nexport type IncrementalCacheValue =\n | CachedRedirectValue\n | IncrementalCachedPageValue\n | IncrementalCachedAppPageValue\n | CachedImageValue\n | CachedFetchValue\n | CachedRouteValue\n\nexport type ResponseCacheValue =\n | CachedRedirectValue\n | CachedPageValue\n | CachedAppPageValue\n | CachedImageValue\n | CachedRouteValue\n\nexport type ResponseCacheEntry = {\n revalidate?: Revalidate\n value: ResponseCacheValue | null\n isStale?: boolean | -1\n isMiss?: boolean\n isFallback: boolean | undefined\n}\n\n/**\n * @param hasResolved whether the responseGenerator has resolved it's promise\n * @param previousCacheEntry the previous cache entry if it exists or the current\n */\nexport type ResponseGenerator = (state: {\n hasResolved: boolean\n previousCacheEntry?: IncrementalCacheItem\n isRevalidating?: boolean\n}) => Promise<ResponseCacheEntry | null>\n\nexport type IncrementalCacheItem = {\n revalidateAfter?: number | false\n curRevalidate?: number | false\n revalidate?: number | false\n value: IncrementalCacheValue | null\n isStale?: boolean | -1\n isMiss?: boolean\n isFallback: boolean | undefined\n} | null\n\nexport const enum IncrementalCacheKind {\n APP_PAGE = 'APP_PAGE',\n APP_ROUTE = 'APP_ROUTE',\n PAGES = 'PAGES',\n FETCH = 'FETCH',\n IMAGE = 'IMAGE',\n}\n\nexport interface IncrementalCache {\n get: (\n key: string,\n ctx: {\n kind: IncrementalCacheKind\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n\n /**\n * True if this is a fallback request.\n */\n isFallback: boolean\n }\n ) => Promise<IncrementalCacheItem>\n set: (\n key: string,\n data: IncrementalCacheValue | null,\n ctx: {\n revalidate: Revalidate\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n\n /**\n * True if this is a fallback request.\n */\n isFallback: boolean\n }\n ) => Promise<void>\n}\n","/**\n * A `Promise.withResolvers` implementation that exposes the `resolve` and\n * `reject` functions on a `Promise`.\n *\n * @see https://tc39.es/proposal-promise-with-resolvers/\n */\nexport class DetachedPromise<T = any> {\n public readonly resolve: (value: T | PromiseLike<T>) => void\n public readonly reject: (reason: any) => void\n public readonly promise: Promise<T>\n\n constructor() {\n let resolve: (value: T | PromiseLike<T>) => void\n let reject: (reason: any) => void\n\n // Create the promise and assign the resolvers to the object.\n this.promise = new Promise<T>((res, rej) => {\n resolve = res\n reject = rej\n })\n\n // We know that resolvers is defined because the Promise constructor runs\n // synchronously.\n this.resolve = resolve!\n this.reject = reject!\n }\n}\n","export const ENCODED_TAGS = {\n // opening tags do not have the closing `>` since they can contain other attributes such as `<body className=''>`\n OPENING: {\n // <html\n HTML: new Uint8Array([60, 104, 116, 109, 108]),\n // <body\n BODY: new Uint8Array([60, 98, 111, 100, 121]),\n },\n CLOSED: {\n // </head>\n HEAD: new Uint8Array([60, 47, 104, 101, 97, 100, 62]),\n // </body>\n BODY: new Uint8Array([60, 47, 98, 111, 100, 121, 62]),\n // </html>\n HTML: new Uint8Array([60, 47, 104, 116, 109, 108, 62]),\n // </body></html>\n BODY_AND_HTML: new Uint8Array([\n 60, 47, 98, 111, 100, 121, 62, 60, 47, 104, 116, 109, 108, 62,\n ]),\n },\n} as const\n","/**\n * Find the starting index of Uint8Array `b` within Uint8Array `a`.\n */\nexport function indexOfUint8Array(a: Uint8Array, b: Uint8Array) {\n if (b.length === 0) return 0\n if (a.length === 0 || b.length > a.length) return -1\n\n // start iterating through `a`\n for (let i = 0; i <= a.length - b.length; i++) {\n let completeMatch = true\n // from index `i`, iterate through `b` and check for mismatch\n for (let j = 0; j < b.length; j++) {\n // if the values do not match, then this isn't a complete match, exit `b` iteration early and iterate to next index of `a`.\n if (a[i + j] !== b[j]) {\n completeMatch = false\n break\n }\n }\n\n if (completeMatch) {\n return i\n }\n }\n\n return -1\n}\n\n/**\n * Check if two Uint8Arrays are strictly equivalent.\n */\nexport function isEquivalentUint8Arrays(a: Uint8Array, b: Uint8Array) {\n if (a.length !== b.length) return false\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n\n return true\n}\n\n/**\n * Remove Uint8Array `b` from Uint8Array `a`.\n *\n * If `b` is not in `a`, `a` is returned unchanged.\n *\n * Otherwise, the function returns a new Uint8Array instance with size `a.length - b.length`\n */\nexport function removeFromUint8Array(a: Uint8Array, b: Uint8Array) {\n const tagIndex = indexOfUint8Array(a, b)\n if (tagIndex === 0) return a.subarray(b.length)\n if (tagIndex > -1) {\n const removed = new Uint8Array(a.length - b.length)\n removed.set(a.slice(0, tagIndex))\n removed.set(a.slice(tagIndex + b.length), tagIndex)\n return removed\n } else {\n return a\n }\n}\n","import { getTracer } from '../lib/trace/tracer'\nimport { AppRenderSpan } from '../lib/trace/constants'\nimport { DetachedPromise } from '../../lib/detached-promise'\nimport { scheduleImmediate, atLeastOneTask } from '../../lib/scheduler'\nimport { ENCODED_TAGS } from './encodedTags'\nimport {\n indexOfUint8Array,\n isEquivalentUint8Arrays,\n removeFromUint8Array,\n} from './uint8array-helpers'\n\nfunction voidCatch() {\n // this catcher is designed to be used with pipeTo where we expect the underlying\n // pipe implementation to forward errors but we don't want the pipeTo promise to reject\n // and be unhandled\n}\n\nexport type ReactReadableStream = ReadableStream<Uint8Array> & {\n allReady?: Promise<void> | undefined\n}\n\n// We can share the same encoder instance everywhere\n// Notably we cannot do the same for TextDecoder because it is stateful\n// when handling streaming data\nconst encoder = new TextEncoder()\n\nexport function chainStreams<T>(\n ...streams: ReadableStream<T>[]\n): ReadableStream<T> {\n // We could encode this invariant in the arguments but current uses of this function pass\n // use spread so it would be missed by\n if (streams.length === 0) {\n throw new Error('Invariant: chainStreams requires at least one stream')\n }\n\n // If we only have 1 stream we fast path it by returning just this stream\n if (streams.length === 1) {\n return streams[0]\n }\n\n const { readable, writable } = new TransformStream()\n\n // We always initiate pipeTo immediately. We know we have at least 2 streams\n // so we need to avoid closing the writable when this one finishes.\n let promise = streams[0].pipeTo(writable, { preventClose: true })\n\n let i = 1\n for (; i < streams.length - 1; i++) {\n const nextStream = streams[i]\n promise = promise.then(() =>\n nextStream.pipeTo(writable, { preventClose: true })\n )\n }\n\n // We can omit the length check because we halted before the last stream and there\n // is at least two streams so the lastStream here will always be defined\n const lastStream = streams[i]\n promise = promise.then(() => lastStream.pipeTo(writable))\n\n // Catch any errors from the streams and ignore them, they will be handled\n // by whatever is consuming the readable stream.\n promise.catch(voidCatch)\n\n return readable\n}\n\nexport function streamFromString(str: string): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(encoder.encode(str))\n controller.close()\n },\n })\n}\n\nexport function streamFromBuffer(chunk: Buffer): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(chunk)\n controller.close()\n },\n })\n}\n\nexport async function streamToBuffer(\n stream: ReadableStream<Uint8Array>\n): Promise<Buffer> {\n const reader = stream.getReader()\n const chunks: Uint8Array[] = []\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n break\n }\n\n chunks.push(value)\n }\n\n return Buffer.concat(chunks)\n}\n\nexport async function streamToString(\n stream: ReadableStream<Uint8Array>,\n signal?: AbortSignal\n): Promise<string> {\n const decoder = new TextDecoder('utf-8', { fatal: true })\n let string = ''\n\n for await (const chunk of stream) {\n if (signal?.aborted) {\n return string\n }\n\n string += decoder.decode(chunk, { stream: true })\n }\n\n string += decoder.decode()\n\n return string\n}\n\nexport function createBufferedTransformStream(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n let bufferedChunks: Array<Uint8Array> = []\n let bufferByteLength: number = 0\n let pending: DetachedPromise<void> | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n // If we already have a pending flush, then return early.\n if (pending) return\n\n const detached = new DetachedPromise<void>()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n const chunk = new Uint8Array(bufferByteLength)\n let copiedBytes = 0\n\n for (let i = 0; i < bufferedChunks.length; i++) {\n const bufferedChunk = bufferedChunks[i]\n chunk.set(bufferedChunk, copiedBytes)\n copiedBytes += bufferedChunk.byteLength\n }\n // We just wrote all the buffered chunks so we need to reset the bufferedChunks array\n // and our bufferByteLength to prepare for the next round of buffered chunks\n bufferedChunks.length = 0\n bufferByteLength = 0\n controller.enqueue(chunk)\n } catch {\n // If an error occurs while enqueuing it can't be due to this\n // transformers fault. It's likely due to the controller being\n // errored due to the stream being cancelled.\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n // Combine the previous buffer with the new chunk.\n bufferedChunks.push(chunk)\n bufferByteLength += chunk.byteLength\n\n // Flush the buffer to the controller.\n flush(controller)\n },\n flush() {\n if (!pending) return\n\n return pending.promise\n },\n })\n}\n\nfunction createInsertedHTMLStream(\n getServerInsertedHTML: () => Promise<string>\n): TransformStream<Uint8Array, Uint8Array> {\n return new TransformStream({\n transform: async (chunk, controller) => {\n const html = await getServerInsertedHTML()\n if (html) {\n controller.enqueue(encoder.encode(html))\n }\n\n controller.enqueue(chunk)\n },\n })\n}\n\nexport function renderToInitialFizzStream({\n ReactDOMServer,\n element,\n streamOptions,\n}: {\n ReactDOMServer: typeof import('react-dom/server.edge')\n element: React.ReactElement\n streamOptions?: Parameters<typeof ReactDOMServer.renderToReadableStream>[1]\n}): Promise<ReactReadableStream> {\n return getTracer().trace(AppRenderSpan.renderToReadableStream, async () =>\n ReactDOMServer.renderToReadableStream(element, streamOptions)\n )\n}\n\nfunction createHeadInsertionTransformStream(\n insert: () => Promise<string>\n): TransformStream<Uint8Array, Uint8Array> {\n let inserted = false\n let freezing = false\n\n // We need to track if this transform saw any bytes because if it didn't\n // we won't want to insert any server HTML at all\n let hasBytes = false\n\n return new TransformStream({\n async transform(chunk, controller) {\n hasBytes = true\n // While react is flushing chunks, we don't apply insertions\n if (freezing) {\n controller.enqueue(chunk)\n return\n }\n\n const insertion = await insert()\n\n if (inserted) {\n if (insertion) {\n const encodedInsertion = encoder.encode(insertion)\n controller.enqueue(encodedInsertion)\n }\n controller.enqueue(chunk)\n freezing = true\n } else {\n // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for.\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.HEAD)\n if (index !== -1) {\n if (insertion) {\n const encodedInsertion = encoder.encode(insertion)\n const insertedHeadContent = new Uint8Array(\n chunk.length + encodedInsertion.length\n )\n insertedHeadContent.set(chunk.slice(0, index))\n insertedHeadContent.set(encodedInsertion, index)\n insertedHeadContent.set(\n chunk.slice(index),\n index + encodedInsertion.length\n )\n controller.enqueue(insertedHeadContent)\n } else {\n controller.enqueue(chunk)\n }\n freezing = true\n inserted = true\n }\n }\n\n if (!inserted) {\n controller.enqueue(chunk)\n } else {\n scheduleImmediate(() => {\n freezing = false\n })\n }\n },\n async flush(controller) {\n // Check before closing if there's anything remaining to insert.\n if (hasBytes) {\n const insertion = await insert()\n if (insertion) {\n controller.enqueue(encoder.encode(insertion))\n }\n }\n },\n })\n}\n\n// Suffix after main body content - scripts before </body>,\n// but wait for the major chunks to be enqueued.\nfunction createDeferredSuffixStream(\n suffix: string\n): TransformStream<Uint8Array, Uint8Array> {\n let flushed = false\n let pending: DetachedPromise<void> | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n const detached = new DetachedPromise<void>()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n controller.enqueue(encoder.encode(suffix))\n } catch {\n // If an error occurs while enqueuing it can't be due to this\n // transformers fault. It's likely due to the controller being\n // errored due to the stream being cancelled.\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // If we've already flushed, we're done.\n if (flushed) return\n\n // Schedule the flush to happen.\n flushed = true\n flush(controller)\n },\n flush(controller) {\n if (pending) return pending.promise\n if (flushed) return\n\n // Flush now.\n controller.enqueue(encoder.encode(suffix))\n },\n })\n}\n\n// Merge two streams into one. Ensure the final transform stream is closed\n// when both are finished.\nfunction createMergedTransformStream(\n stream: ReadableStream<Uint8Array>\n): TransformStream<Uint8Array, Uint8Array> {\n let pull: Promise<void> | null = null\n let donePulling = false\n\n async function startPulling(controller: TransformStreamDefaultController) {\n if (pull) {\n return\n }\n\n const reader = stream.getReader()\n\n // NOTE: streaming flush\n // We are buffering here for the inlined data stream because the\n // \"shell\" stream might be chunkenized again by the underlying stream\n // implementation, e.g. with a specific high-water mark. To ensure it's\n // the safe timing to pipe the data stream, this extra tick is\n // necessary.\n\n // We don't start reading until we've left the current Task to ensure\n // that it's inserted after flushing the shell. Note that this implementation\n // might get stale if impl details of Fizz change in the future.\n await atLeastOneTask()\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n donePulling = true\n return\n }\n\n controller.enqueue(value)\n }\n } catch (err) {\n controller.error(err)\n }\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // Start the streaming if it hasn't already been started yet.\n if (!pull) {\n pull = startPulling(controller)\n }\n },\n flush(controller) {\n if (donePulling) {\n return\n }\n return pull || startPulling(controller)\n },\n })\n}\n\nconst CLOSE_TAG = '</body></html>'\n\n/**\n * This transform stream moves the suffix to the end of the stream, so results\n * like `</body></html><script>...</script>` will be transformed to\n * `<script>...</script></body></html>`.\n */\nfunction createMoveSuffixStream(): TransformStream<Uint8Array, Uint8Array> {\n let foundSuffix = false\n\n return new TransformStream({\n transform(chunk, controller) {\n if (foundSuffix) {\n return controller.enqueue(chunk)\n }\n\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n if (index > -1) {\n foundSuffix = true\n\n // If the whole chunk is the suffix, then don't write anything, it will\n // be written in the flush.\n if (chunk.length === ENCODED_TAGS.CLOSED.BODY_AND_HTML.length) {\n return\n }\n\n // Write out the part before the suffix.\n const before = chunk.slice(0, index)\n controller.enqueue(before)\n\n // In the case where the suffix is in the middle of the chunk, we need\n // to split the chunk into two parts.\n if (chunk.length > ENCODED_TAGS.CLOSED.BODY_AND_HTML.length + index) {\n // Write out the part after the suffix.\n const after = chunk.slice(\n index + ENCODED_TAGS.CLOSED.BODY_AND_HTML.length\n )\n controller.enqueue(after)\n }\n } else {\n controller.enqueue(chunk)\n }\n },\n flush(controller) {\n // Even if we didn't find the suffix, the HTML is not valid if we don't\n // add it, so insert it at the end.\n controller.enqueue(ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n },\n })\n}\n\nfunction createStripDocumentClosingTagsTransform(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n return new TransformStream({\n transform(chunk, controller) {\n // We rely on the assumption that chunks will never break across a code unit.\n // This is reasonable because we currently concat all of React's output from a single\n // flush into one chunk before streaming it forward which means the chunk will represent\n // a single coherent utf-8 string. This is not safe to use if we change our streaming to no\n // longer do this large buffered chunk\n if (\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.HTML)\n ) {\n // the entire chunk is the closing tags; return without enqueueing anything.\n return\n }\n\n // We assume these tags will go at together at the end of the document and that\n // they won't appear anywhere else in the document. This is not really a safe assumption\n // but until we revamp our streaming infra this is a performant way to string the tags\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY)\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.HTML)\n\n controller.enqueue(chunk)\n },\n })\n}\n\n/*\n * Checks if the root layout is missing the html or body tags\n * and if so, it will inject a script tag to throw an error in the browser, showing the user\n * the error message in the error overlay.\n */\nexport function createRootLayoutValidatorStream(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n let foundHtml = false\n let foundBody = false\n return new TransformStream({\n async transform(chunk, controller) {\n // Peek into the streamed chunk to see if the tags are present.\n if (\n !foundHtml &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.HTML) > -1\n ) {\n foundHtml = true\n }\n\n if (\n !foundBody &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.BODY) > -1\n ) {\n foundBody = true\n }\n\n controller.enqueue(chunk)\n },\n flush(controller) {\n const missingTags: typeof window.__next_root_layout_missing_tags = []\n if (!foundHtml) missingTags.push('html')\n if (!foundBody) missingTags.push('body')\n\n if (!missingTags.length) return\n\n controller.enqueue(\n encoder.encode(\n `<script>self.__next_root_layout_missing_tags=${JSON.stringify(\n missingTags\n )}</script>`\n )\n )\n },\n })\n}\n\nfunction chainTransformers<T>(\n readable: ReadableStream<T>,\n transformers: ReadonlyArray<TransformStream<T, T> | null>\n): ReadableStream<T> {\n let stream = readable\n for (const transformer of transformers) {\n if (!transformer) continue\n\n stream = stream.pipeThrough(transformer)\n }\n return stream\n}\n\nexport type ContinueStreamOptions = {\n inlinedDataStream: ReadableStream<Uint8Array> | undefined\n isStaticGeneration: boolean\n getServerInsertedHTML: (() => Promise<string>) | undefined\n serverInsertedHTMLToHead: boolean\n validateRootLayout?: boolean\n /**\n * Suffix to inject after the buffered data, but before the close tags.\n */\n suffix?: string | undefined\n}\n\nexport async function continueFizzStream(\n renderStream: ReactReadableStream,\n {\n suffix,\n inlinedDataStream,\n isStaticGeneration,\n getServerInsertedHTML,\n serverInsertedHTMLToHead,\n validateRootLayout,\n }: ContinueStreamOptions\n): Promise<ReadableStream<Uint8Array>> {\n // Suffix itself might contain close tags at the end, so we need to split it.\n const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null\n\n // If we're generating static HTML and there's an `allReady` promise on the\n // stream, we need to wait for it to resolve before continuing.\n if (isStaticGeneration && 'allReady' in renderStream) {\n await renderStream.allReady\n }\n\n return chainTransformers(renderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n\n // Insert generated tags to head\n getServerInsertedHTML && !serverInsertedHTMLToHead\n ? createInsertedHTMLStream(getServerInsertedHTML)\n : null,\n\n // Insert suffix content\n suffixUnclosed != null && suffixUnclosed.length > 0\n ? createDeferredSuffixStream(suffixUnclosed)\n : null,\n\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n inlinedDataStream ? createMergedTransformStream(inlinedDataStream) : null,\n\n // Validate the root layout for missing html or body tags\n validateRootLayout ? createRootLayoutValidatorStream() : null,\n\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n\n // Special head insertions\n // TODO-APP: Insert server side html to end of head in app layout rendering, to avoid\n // hydration errors. Remove this once it's ready to be handled by react itself.\n getServerInsertedHTML && serverInsertedHTMLToHead\n ? createHeadInsertionTransformStream(getServerInsertedHTML)\n : null,\n ])\n}\n\ntype ContinueDynamicPrerenderOptions = {\n getServerInsertedHTML: () => Promise<string>\n}\n\nexport async function continueDynamicPrerender(\n prerenderStream: ReadableStream<Uint8Array>,\n { getServerInsertedHTML }: ContinueDynamicPrerenderOptions\n) {\n return (\n prerenderStream\n // Buffer everything to avoid flushing too frequently\n .pipeThrough(createBufferedTransformStream())\n .pipeThrough(createStripDocumentClosingTagsTransform())\n // Insert generated tags to head\n .pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML))\n )\n}\n\ntype ContinueStaticPrerenderOptions = {\n inlinedDataStream: ReadableStream<Uint8Array>\n getServerInsertedHTML: () => Promise<string>\n}\n\nexport async function continueStaticPrerender(\n prerenderStream: ReadableStream<Uint8Array>,\n { inlinedDataStream, getServerInsertedHTML }: ContinueStaticPrerenderOptions\n) {\n return (\n prerenderStream\n // Buffer everything to avoid flushing too frequently\n .pipeThrough(createBufferedTransformStream())\n // Insert generated tags to head\n .pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML))\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n .pipeThrough(createMergedTransformStream(inlinedDataStream))\n // Close tags should always be deferred to the end\n .pipeThrough(createMoveSuffixStream())\n )\n}\n\ntype ContinueResumeOptions = {\n inlinedDataStream: ReadableStream<Uint8Array>\n getServerInsertedHTML: () => Promise<string>\n}\n\nexport async function continueDynamicHTMLResume(\n renderStream: ReadableStream<Uint8Array>,\n { inlinedDataStream, getServerInsertedHTML }: ContinueResumeOptions\n) {\n return (\n renderStream\n // Buffer everything to avoid flushing too frequently\n .pipeThrough(createBufferedTransformStream())\n // Insert generated tags to head\n .pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML))\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n .pipeThrough(createMergedTransformStream(inlinedDataStream))\n // Close tags should always be deferred to the end\n .pipeThrough(createMoveSuffixStream())\n )\n}\n\nexport function createDocumentClosingStream(): ReadableStream<Uint8Array> {\n return streamFromString(CLOSE_TAG)\n}\n","/* eslint-disable no-redeclare */\nimport type { IncomingMessage } from 'http'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { UrlWithParsedQuery } from 'url'\nimport type { BaseNextRequest } from './base-http'\nimport type { CloneableBody } from './body-streams'\nimport type { RouteMatch } from './route-matches/route-match'\nimport type { NEXT_RSC_UNION_QUERY } from '../client/components/app-router-headers'\nimport type { ServerComponentsHmrCache } from './response-cache'\n\n// FIXME: (wyattjoh) this is a temporary solution to allow us to pass data between bundled modules\nexport const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta')\n\nexport type NextIncomingMessage = (BaseNextRequest | IncomingMessage) & {\n [NEXT_REQUEST_META]?: RequestMeta\n}\n\nexport interface RequestMeta {\n /**\n * The query that was used to make the request.\n */\n initQuery?: ParsedUrlQuery\n\n /**\n * The URL that was used to make the request.\n */\n initURL?: string\n\n /**\n * The protocol that was used to make the request.\n */\n initProtocol?: string\n\n /**\n * The body that was read from the request. This is used to allow the body to\n * be read multiple times.\n */\n clonableBody?: CloneableBody\n\n /**\n * True when the request matched a locale domain that was configured in the\n * next.config.js file.\n */\n isLocaleDomain?: boolean\n\n /**\n * True when the request had locale information stripped from the pathname\n * part of the URL.\n */\n didStripLocale?: boolean\n\n /**\n * If the request had it's URL rewritten, this is the URL it was rewritten to.\n */\n rewroteURL?: string\n\n /**\n * The cookies that were added by middleware and were added to the response.\n */\n middlewareCookie?: string[]\n\n /**\n * The match on the request for a given route.\n */\n match?: RouteMatch\n\n /**\n * The incremental cache to use for the request.\n */\n incrementalCache?: any\n\n /**\n * The server components HMR cache, only for dev.\n */\n serverComponentsHmrCache?: ServerComponentsHmrCache\n\n /**\n * True when the request is for the prefetch flight data.\n */\n isPrefetchRSCRequest?: true\n\n /**\n * True when the request is for the flight data.\n */\n isRSCRequest?: true\n\n /**\n * True when the request is for the `/_next/data` route using the pages\n * router.\n */\n isNextDataReq?: true\n\n /**\n * Postponed state to use for resumption. If present it's assumed that the\n * request is for a page that has postponed (there are no guarantees that the\n * page actually has postponed though as it would incur an additional cache\n * lookup).\n */\n postponed?: string\n\n /**\n * If provided, this will be called when a response cache entry was generated\n * or looked up in the cache.\n */\n onCacheEntry?: (\n cacheEntry: any,\n requestMeta: any\n ) => Promise<boolean | void> | boolean | void\n\n /**\n * The previous revalidate before rendering 404 page for notFound: true\n */\n notFoundRevalidate?: number | false\n\n /**\n * In development, the original source page that returned a 404.\n */\n developmentNotFoundSourcePage?: string\n\n /**\n * The path we routed to and should be invoked\n */\n invokePath?: string\n\n /**\n * The specific page output we should be matching\n */\n invokeOutput?: string\n\n /**\n * The status we are invoking the request with from routing\n */\n invokeStatus?: number\n\n /**\n * The routing error we are invoking with\n */\n invokeError?: Error\n\n /**\n * The query parsed for the invocation\n */\n invokeQuery?: Record<string, undefined | string | string[]>\n\n /**\n * Whether the request is a middleware invocation\n */\n middlewareInvoke?: boolean\n\n /**\n * Whether the default route matches were set on the request during routing.\n */\n didSetDefaultRouteMatches?: boolean\n\n /**\n * Whether the request is for the custom error page.\n */\n customErrorRender?: true\n\n /**\n * Whether to bubble up the NoFallbackError to the caller when a 404 is\n * returned.\n */\n bubbleNoFallback?: true\n\n /**\n * True when the request had locale information inferred from the default\n * locale.\n */\n localeInferredFromDefault?: true\n\n /**\n * The locale that was inferred or explicitly set for the request.\n */\n locale?: string\n\n /**\n * The default locale that was inferred or explicitly set for the request.\n */\n defaultLocale?: string\n}\n\n/**\n * Gets the request metadata. If no key is provided, the entire metadata object\n * is returned.\n *\n * @param req the request to get the metadata from\n * @param key the key to get from the metadata (optional)\n * @returns the value for the key or the entire metadata object\n */\nexport function getRequestMeta(\n req: NextIncomingMessage,\n key?: undefined\n): RequestMeta\nexport function getRequestMeta<K extends keyof RequestMeta>(\n req: NextIncomingMessage,\n key: K\n): RequestMeta[K]\nexport function getRequestMeta<K extends keyof RequestMeta>(\n req: NextIncomingMessage,\n key?: K\n): RequestMeta | RequestMeta[K] {\n const meta = req[NEXT_REQUEST_META] || {}\n return typeof key === 'string' ? meta[key] : meta\n}\n\n/**\n * Sets the request metadata.\n *\n * @param req the request to set the metadata on\n * @param meta the metadata to set\n * @returns the mutated request metadata\n */\nexport function setRequestMeta(req: NextIncomingMessage, meta: RequestMeta) {\n req[NEXT_REQUEST_META] = meta\n return meta\n}\n\n/**\n * Adds a value to the request metadata.\n *\n * @param request the request to mutate\n * @param key the key to set\n * @param value the value to set\n * @returns the mutated request metadata\n */\nexport function addRequestMeta<K extends keyof RequestMeta>(\n request: NextIncomingMessage,\n key: K,\n value: RequestMeta[K]\n) {\n const meta = getRequestMeta(request)\n meta[key] = value\n return setRequestMeta(request, meta)\n}\n\n/**\n * Removes a key from the request metadata.\n *\n * @param request the request to mutate\n * @param key the key to remove\n * @returns the mutated request metadata\n */\nexport function removeRequestMeta<K extends keyof RequestMeta>(\n request: NextIncomingMessage,\n key: K\n) {\n const meta = getRequestMeta(request)\n delete meta[key]\n return setRequestMeta(request, meta)\n}\n\ntype NextQueryMetadata = {\n /**\n * The `_rsc` query parameter used for cache busting to ensure that the RSC\n * requests do not get cached by the browser explicitly.\n */\n [NEXT_RSC_UNION_QUERY]?: string\n}\n\nexport type NextParsedUrlQuery = ParsedUrlQuery &\n NextQueryMetadata & {\n amp?: '1'\n }\n\nexport interface NextUrlWithParsedQuery extends UrlWithParsedQuery {\n query: NextParsedUrlQuery\n}\n","/**\n * Removes the trailing slash for a given route or page path. Preserves the\n * root page. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n * - `/` -> `/`\n */\nexport function removeTrailingSlash(route: string) {\n return route.replace(/\\/$/, '') || '/'\n}\n","/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */\nexport function parsePath(path: string) {\n const hashIndex = path.indexOf('#')\n const queryIndex = path.indexOf('?')\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex)\n\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery\n ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined)\n : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : '',\n }\n }\n\n return { pathname: path, query: '', hash: '' }\n}\n","import { parsePath } from './parse-path'\n\n/**\n * Adds the provided prefix to the given path. It first ensures that the path\n * is indeed starting with a slash.\n */\nexport function addPathPrefix(path: string, prefix?: string) {\n if (!path.startsWith('/') || !prefix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${prefix}${pathname}${query}${hash}`\n}\n","import { parsePath } from './parse-path'\n\n/**\n * Similarly to `addPathPrefix`, this function adds a suffix at the end on the\n * provided path. It also works only for paths ensuring the argument starts\n * with a slash.\n */\nexport function addPathSuffix(path: string, suffix?: string) {\n if (!path.startsWith('/') || !suffix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${pathname}${suffix}${query}${hash}`\n}\n","import { parsePath } from './parse-path'\n\n/**\n * Checks if a given path starts with a given prefix. It ensures it matches\n * exactly without containing extra chars. e.g. prefix /docs should replace\n * for /docs, /docs/, /docs/a but not /docsss\n * @param path The path to check.\n * @param prefix The prefix to check against.\n */\nexport function pathHasPrefix(path: string, prefix: string) {\n if (typeof path !== 'string') {\n return false\n }\n\n const { pathname } = parsePath(path)\n return pathname === prefix || pathname.startsWith(prefix + '/')\n}\n","export interface PathLocale {\n detectedLocale?: string\n pathname: string\n}\n\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */\nconst cache = new WeakMap<readonly string[], readonly string[]>()\n\n/**\n * For a pathname that may include a locale from a list of locales, it\n * removes the locale from the pathname returning it alongside with the\n * detected locale.\n *\n * @param pathname A pathname that may include a locale.\n * @param locales A list of locales.\n * @returns The detected locale and pathname without locale\n */\nexport function normalizeLocalePath(\n pathname: string,\n locales?: readonly string[]\n): PathLocale {\n // If locales is undefined, return the pathname as is.\n if (!locales) return { pathname }\n\n // Get the cached lowercased locales or create a new cache entry.\n let lowercasedLocales = cache.get(locales)\n if (!lowercasedLocales) {\n lowercasedLocales = locales.map((locale) => locale.toLowerCase())\n cache.set(locales, lowercasedLocales)\n }\n\n let detectedLocale: string | undefined\n\n // The first segment will be empty, because it has a leading `/`. If\n // there is no further segment, there is no locale (or it's the default).\n const segments = pathname.split('/', 2)\n\n // If there's no second segment (ie, the pathname is just `/`), there's no\n // locale.\n if (!segments[1]) return { pathname }\n\n // The second segment will contain the locale part if any.\n const segment = segments[1].toLowerCase()\n\n // See if the segment matches one of the locales. If it doesn't, there is\n // no locale (or it's the default).\n const index = lowercasedLocales.indexOf(segment)\n if (index < 0) return { pathname }\n\n // Return the case-sensitive locale.\n detectedLocale = locales[index]\n\n // Remove the `/${locale}` part of the pathname.\n pathname = pathname.slice(detectedLocale.length + 1) || '/'\n\n return { pathname, detectedLocale }\n}\n","import type { OutgoingHttpHeaders } from 'http'\nimport type { DomainLocale, I18NConfig } from '../config-shared'\nimport type { I18NProvider } from '../lib/i18n-provider'\n\nimport { detectDomainLocale } from '../../shared/lib/i18n/detect-domain-locale'\nimport { formatNextPathnameInfo } from '../../shared/lib/router/utils/format-next-pathname-info'\nimport { getHostname } from '../../shared/lib/get-hostname'\nimport { getNextPathnameInfo } from '../../shared/lib/router/utils/get-next-pathname-info'\n\ninterface Options {\n base?: string | URL\n headers?: OutgoingHttpHeaders\n forceLocale?: boolean\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n i18nProvider?: I18NProvider\n}\n\nconst REGEX_LOCALHOST_HOSTNAME =\n /(?!^https?:\\/\\/)(127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\\[::1\\]|localhost)/\n\nfunction parseURL(url: string | URL, base?: string | URL) {\n return new URL(\n String(url).replace(REGEX_LOCALHOST_HOSTNAME, 'localhost'),\n base && String(base).replace(REGEX_LOCALHOST_HOSTNAME, 'localhost')\n )\n}\n\nconst Internal = Symbol('NextURLInternal')\n\nexport class NextURL {\n private [Internal]: {\n basePath: string\n buildId?: string\n flightSearchParameters?: Record<string, string>\n defaultLocale?: string\n domainLocale?: DomainLocale\n locale?: string\n options: Options\n trailingSlash?: boolean\n url: URL\n }\n\n constructor(input: string | URL, base?: string | URL, opts?: Options)\n constructor(input: string | URL, opts?: Options)\n constructor(\n input: string | URL,\n baseOrOpts?: string | URL | Options,\n opts?: Options\n ) {\n let base: undefined | string | URL\n let options: Options\n\n if (\n (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts) ||\n typeof baseOrOpts === 'string'\n ) {\n base = baseOrOpts\n options = opts || {}\n } else {\n options = opts || baseOrOpts || {}\n }\n\n this[Internal] = {\n url: parseURL(input, base ?? options.base),\n options: options,\n basePath: '',\n }\n\n this.analyze()\n }\n\n private analyze() {\n const info = getNextPathnameInfo(this[Internal].url.pathname, {\n nextConfig: this[Internal].options.nextConfig,\n parseData: !process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,\n i18nProvider: this[Internal].options.i18nProvider,\n })\n\n const hostname = getHostname(\n this[Internal].url,\n this[Internal].options.headers\n )\n this[Internal].domainLocale = this[Internal].options.i18nProvider\n ? this[Internal].options.i18nProvider.detectDomainLocale(hostname)\n : detectDomainLocale(\n this[Internal].options.nextConfig?.i18n?.domains,\n hostname\n )\n\n const defaultLocale =\n this[Internal].domainLocale?.defaultLocale ||\n this[Internal].options.nextConfig?.i18n?.defaultLocale\n\n this[Internal].url.pathname = info.pathname\n this[Internal].defaultLocale = defaultLocale\n this[Internal].basePath = info.basePath ?? ''\n this[Internal].buildId = info.buildId\n this[Internal].locale = info.locale ?? defaultLocale\n this[Internal].trailingSlash = info.trailingSlash\n }\n\n private formatPathname() {\n return formatNextPathnameInfo({\n basePath: this[Internal].basePath,\n buildId: this[Internal].buildId,\n defaultLocale: !this[Internal].options.forceLocale\n ? this[Internal].defaultLocale\n : undefined,\n locale: this[Internal].locale,\n pathname: this[Internal].url.pathname,\n trailingSlash: this[Internal].trailingSlash,\n })\n }\n\n private formatSearch() {\n return this[Internal].url.search\n }\n\n public get buildId() {\n return this[Internal].buildId\n }\n\n public set buildId(buildId: string | undefined) {\n this[Internal].buildId = buildId\n }\n\n public get locale() {\n return this[Internal].locale ?? ''\n }\n\n public set locale(locale: string) {\n if (\n !this[Internal].locale ||\n !this[Internal].options.nextConfig?.i18n?.locales.includes(locale)\n ) {\n throw new TypeError(\n `The NextURL configuration includes no locale \"${locale}\"`\n )\n }\n\n this[Internal].locale = locale\n }\n\n get defaultLocale() {\n return this[Internal].defaultLocale\n }\n\n get domainLocale() {\n return this[Internal].domainLocale\n }\n\n get searchParams() {\n return this[Internal].url.searchParams\n }\n\n get host() {\n return this[Internal].url.host\n }\n\n set host(value: string) {\n this[Internal].url.host = value\n }\n\n get hostname() {\n return this[Internal].url.hostname\n }\n\n set hostname(value: string) {\n this[Internal].url.hostname = value\n }\n\n get port() {\n return this[Internal].url.port\n }\n\n set port(value: string) {\n this[Internal].url.port = value\n }\n\n get protocol() {\n return this[Internal].url.protocol\n }\n\n set protocol(value: string) {\n this[Internal].url.protocol = value\n }\n\n get href() {\n const pathname = this.formatPathname()\n const search = this.formatSearch()\n return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`\n }\n\n set href(url: string) {\n this[Internal].url = parseURL(url)\n this.analyze()\n }\n\n get origin() {\n return this[Internal].url.origin\n }\n\n get pathname() {\n return this[Internal].url.pathname\n }\n\n set pathname(value: string) {\n this[Internal].url.pathname = value\n }\n\n get hash() {\n return this[Internal].url.hash\n }\n\n set hash(value: string) {\n this[Internal].url.hash = value\n }\n\n get search() {\n return this[Internal].url.search\n }\n\n set search(value: string) {\n this[Internal].url.search = value\n }\n\n get password() {\n return this[Internal].url.password\n }\n\n set password(value: string) {\n this[Internal].url.password = value\n }\n\n get username() {\n return this[Internal].url.username\n }\n\n set username(value: string) {\n this[Internal].url.username = value\n }\n\n get basePath() {\n return this[Internal].basePath\n }\n\n set basePath(value: string) {\n this[Internal].basePath = value.startsWith('/') ? value : `/${value}`\n }\n\n toString() {\n return this.href\n }\n\n toJSON() {\n return this.href\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n href: this.href,\n origin: this.origin,\n protocol: this.protocol,\n username: this.username,\n password: this.password,\n host: this.host,\n hostname: this.hostname,\n port: this.port,\n pathname: this.pathname,\n search: this.search,\n searchParams: this.searchParams,\n hash: this.hash,\n }\n }\n\n clone() {\n return new NextURL(String(this), this[Internal].options)\n }\n}\n","import { normalizeLocalePath } from '../../i18n/normalize-locale-path'\nimport { removePathPrefix } from './remove-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\nimport type { I18NProvider } from '../../../../server/lib/i18n-provider'\n\nexport interface NextPathnameInfo {\n /**\n * The base path in case the pathname included it.\n */\n basePath?: string\n /**\n * The buildId for when the parsed URL is a data URL. Parsing it can be\n * disabled with the `parseData` option.\n */\n buildId?: string\n /**\n * If there was a locale in the pathname, this will hold its value.\n */\n locale?: string\n /**\n * The processed pathname without a base path, locale, or data URL elements\n * when parsing it is enabled.\n */\n pathname: string\n /**\n * A boolean telling if the pathname had a trailingSlash. This can be only\n * true if trailingSlash is enabled.\n */\n trailingSlash?: boolean\n}\n\ninterface Options {\n /**\n * When passed to true, this function will also parse Nextjs data URLs.\n */\n parseData?: boolean\n /**\n * A partial of the Next.js configuration to parse the URL.\n */\n nextConfig?: {\n basePath?: string\n i18n?: { locales?: readonly string[] } | null\n trailingSlash?: boolean\n }\n\n /**\n * If provided, this normalizer will be used to detect the locale instead of\n * the default locale detection.\n */\n i18nProvider?: I18NProvider\n}\n\nexport function getNextPathnameInfo(\n pathname: string,\n options: Options\n): NextPathnameInfo {\n const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}\n const info: NextPathnameInfo = {\n pathname,\n trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash,\n }\n\n if (basePath && pathHasPrefix(info.pathname, basePath)) {\n info.pathname = removePathPrefix(info.pathname, basePath)\n info.basePath = basePath\n }\n let pathnameNoDataPrefix = info.pathname\n\n if (\n info.pathname.startsWith('/_next/data/') &&\n info.pathname.endsWith('.json')\n ) {\n const paths = info.pathname\n .replace(/^\\/_next\\/data\\//, '')\n .replace(/\\.json$/, '')\n .split('/')\n\n const buildId = paths[0]\n info.buildId = buildId\n pathnameNoDataPrefix =\n paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'\n\n // update pathname with normalized if enabled although\n // we use normalized to populate locale info still\n if (options.parseData === true) {\n info.pathname = pathnameNoDataPrefix\n }\n }\n\n // If provided, use the locale route normalizer to detect the locale instead\n // of the function below.\n if (i18n) {\n let result = options.i18nProvider\n ? options.i18nProvider.analyze(info.pathname)\n : normalizeLocalePath(info.pathname, i18n.locales)\n\n info.locale = result.detectedLocale\n info.pathname = result.pathname ?? info.pathname\n\n if (!result.detectedLocale && info.buildId) {\n result = options.i18nProvider\n ? options.i18nProvider.analyze(pathnameNoDataPrefix)\n : normalizeLocalePath(pathnameNoDataPrefix, i18n.locales)\n\n if (result.detectedLocale) {\n info.locale = result.detectedLocale\n }\n }\n }\n return info\n}\n","import { pathHasPrefix } from './path-has-prefix'\n\n/**\n * Given a path and a prefix it will remove the prefix when it exists in the\n * given path. It ensures it matches exactly without containing extra chars\n * and if the prefix is not there it will be noop.\n *\n * @param path The path to remove the prefix from.\n * @param prefix The prefix to be removed.\n */\nexport function removePathPrefix(path: string, prefix: string): string {\n // If the path doesn't start with the prefix we can return it as is. This\n // protects us from situations where the prefix is a substring of the path\n // prefix such as:\n //\n // For prefix: /blog\n //\n // /blog -> true\n // /blog/ -> true\n // /blog/1 -> true\n // /blogging -> false\n // /blogging/ -> false\n // /blogging/1 -> false\n if (!pathHasPrefix(path, prefix)) {\n return path\n }\n\n // Remove the prefix from the path via slicing.\n const withoutPrefix = path.slice(prefix.length)\n\n // If the path without the prefix starts with a `/` we can return it as is.\n if (withoutPrefix.startsWith('/')) {\n return withoutPrefix\n }\n\n // If the path without the prefix doesn't start with a `/` we need to add it\n // back to the path to make sure it's a valid path.\n return `/${withoutPrefix}`\n}\n","import type { OutgoingHttpHeaders } from 'http'\n\n/**\n * Takes an object with a hostname property (like a parsed URL) and some\n * headers that may contain Host and returns the preferred hostname.\n * @param parsed An object containing a hostname property.\n * @param headers A dictionary with headers containing a `host`.\n */\nexport function getHostname(\n parsed: { hostname?: string | null },\n headers?: OutgoingHttpHeaders\n): string | undefined {\n // Get the hostname from the headers if it exists, otherwise use the parsed\n // hostname.\n let hostname: string\n if (headers?.host && !Array.isArray(headers.host)) {\n hostname = headers.host.toString().split(':', 1)[0]\n } else if (parsed.hostname) {\n hostname = parsed.hostname\n } else return\n\n return hostname.toLowerCase()\n}\n","import type { DomainLocale } from '../../../server/config-shared'\n\nexport function detectDomainLocale(\n domainItems?: readonly DomainLocale[],\n hostname?: string,\n detectedLocale?: string\n) {\n if (!domainItems) return\n\n if (detectedLocale) {\n detectedLocale = detectedLocale.toLowerCase()\n }\n\n for (const item of domainItems) {\n // remove port if present\n const domainHostname = item.domain?.split(':', 1)[0].toLowerCase()\n if (\n hostname === domainHostname ||\n detectedLocale === item.defaultLocale.toLowerCase() ||\n item.locales?.some((locale) => locale.toLowerCase() === detectedLocale)\n ) {\n return item\n }\n }\n}\n","import type { NextPathnameInfo } from './get-next-pathname-info'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { addPathPrefix } from './add-path-prefix'\nimport { addPathSuffix } from './add-path-suffix'\nimport { addLocale } from './add-locale'\n\ninterface ExtendedInfo extends NextPathnameInfo {\n defaultLocale?: string\n ignorePrefix?: boolean\n}\n\nexport function formatNextPathnameInfo(info: ExtendedInfo) {\n let pathname = addLocale(\n info.pathname,\n info.locale,\n info.buildId ? undefined : info.defaultLocale,\n info.ignorePrefix\n )\n\n if (info.buildId || !info.trailingSlash) {\n pathname = removeTrailingSlash(pathname)\n }\n\n if (info.buildId) {\n pathname = addPathSuffix(\n addPathPrefix(pathname, `/_next/data/${info.buildId}`),\n info.pathname === '/' ? 'index.json' : '.json'\n )\n }\n\n pathname = addPathPrefix(pathname, info.basePath)\n return !info.buildId && info.trailingSlash\n ? !pathname.endsWith('/')\n ? addPathSuffix(pathname, '/')\n : pathname\n : removeTrailingSlash(pathname)\n}\n","import { addPathPrefix } from './add-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\n\n/**\n * For a given path and a locale, if the locale is given, it will prefix the\n * locale. The path shouldn't be an API path. If a default locale is given the\n * prefix will be omitted if the locale is already the default locale.\n */\nexport function addLocale(\n path: string,\n locale?: string | false,\n defaultLocale?: string,\n ignorePrefix?: boolean\n) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path\n\n const lower = path.toLowerCase()\n\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if (pathHasPrefix(lower, '/api')) return path\n if (pathHasPrefix(lower, `/${locale.toLowerCase()}`)) return path\n }\n\n // Add the locale prefix to the path.\n return addPathPrefix(path, `/${locale}`)\n}\n","import type { I18NConfig } from '../../config-shared'\nimport { NextURL } from '../next-url'\nimport { toNodeOutgoingHttpHeaders, validateURL } from '../utils'\nimport { RemovedUAError, RemovedPageError } from '../error'\nimport { RequestCookies } from './cookies'\n\nexport const INTERNALS = Symbol('internal request')\n\n/**\n * This class extends the [Web `Request` API](https://developer.mozilla.org/docs/Web/API/Request) with additional convenience methods.\n *\n * Read more: [Next.js Docs: `NextRequest`](https://nextjs.org/docs/app/api-reference/functions/next-request)\n */\nexport class NextRequest extends Request {\n [INTERNALS]: {\n cookies: RequestCookies\n url: string\n nextUrl: NextURL\n }\n\n constructor(input: URL | RequestInfo, init: RequestInit = {}) {\n const url =\n typeof input !== 'string' && 'url' in input ? input.url : String(input)\n validateURL(url)\n if (input instanceof Request) super(input, init)\n else super(url, init)\n const nextUrl = new NextURL(url, {\n headers: toNodeOutgoingHttpHeaders(this.headers),\n nextConfig: init.nextConfig,\n })\n this[INTERNALS] = {\n cookies: new RequestCookies(this.headers),\n nextUrl,\n url: process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ? url\n : nextUrl.toString(),\n }\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n cookies: this.cookies,\n nextUrl: this.nextUrl,\n url: this.url,\n // rest of props come from Request\n bodyUsed: this.bodyUsed,\n cache: this.cache,\n credentials: this.credentials,\n destination: this.destination,\n headers: Object.fromEntries(this.headers),\n integrity: this.integrity,\n keepalive: this.keepalive,\n method: this.method,\n mode: this.mode,\n redirect: this.redirect,\n referrer: this.referrer,\n referrerPolicy: this.referrerPolicy,\n signal: this.signal,\n }\n }\n\n public get cookies() {\n return this[INTERNALS].cookies\n }\n\n public get nextUrl() {\n return this[INTERNALS].nextUrl\n }\n\n /**\n * @deprecated\n * `page` has been deprecated in favour of `URLPattern`.\n * Read more: https://nextjs.org/docs/messages/middleware-request-page\n */\n public get page() {\n throw new RemovedPageError()\n }\n\n /**\n * @deprecated\n * `ua` has been removed in favour of \\`userAgent\\` function.\n * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n */\n public get ua() {\n throw new RemovedUAError()\n }\n\n public get url() {\n return this[INTERNALS].url\n }\n}\n\nexport interface RequestInit extends globalThis.RequestInit {\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n signal?: AbortSignal\n}\n","import type { BaseNextRequest } from '../../../base-http'\nimport type { NodeNextRequest } from '../../../base-http/node'\nimport type { WebNextRequest } from '../../../base-http/web'\nimport type { Writable } from 'node:stream'\n\nimport { getRequestMeta } from '../../../request-meta'\nimport { fromNodeOutgoingHttpHeaders } from '../../utils'\nimport { NextRequest } from '../request'\nimport { isNodeNextRequest, isWebNextRequest } from '../../../base-http/helpers'\n\nexport const ResponseAbortedName = 'ResponseAborted'\nexport class ResponseAborted extends Error {\n public readonly name = ResponseAbortedName\n}\n\n/**\n * Creates an AbortController tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * If the `close` event is fired before the `finish` event, then we'll send the\n * `abort` signal.\n */\nexport function createAbortController(response: Writable): AbortController {\n const controller = new AbortController()\n\n // If `finish` fires first, then `res.end()` has been called and the close is\n // just us finishing the stream on our side. If `close` fires first, then we\n // know the client disconnected before we finished.\n response.once('close', () => {\n if (response.writableFinished) return\n\n controller.abort(new ResponseAborted())\n })\n\n return controller\n}\n\n/**\n * Creates an AbortSignal tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * This cannot be done with the request (IncomingMessage or Readable) because\n * the `abort` event will not fire if to data has been fully read (because that\n * will \"close\" the readable stream and nothing fires after that).\n */\nexport function signalFromNodeResponse(response: Writable): AbortSignal {\n const { errored, destroyed } = response\n if (errored || destroyed) {\n return AbortSignal.abort(errored ?? new ResponseAborted())\n }\n\n const { signal } = createAbortController(response)\n return signal\n}\n\nexport class NextRequestAdapter {\n public static fromBaseNextRequest(\n request: BaseNextRequest,\n signal: AbortSignal\n ): NextRequest {\n if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME === 'edge' &&\n isWebNextRequest(request)\n ) {\n return NextRequestAdapter.fromWebNextRequest(request)\n } else if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME !== 'edge' &&\n isNodeNextRequest(request)\n ) {\n return NextRequestAdapter.fromNodeNextRequest(request, signal)\n } else {\n throw new Error('Invariant: Unsupported NextRequest type')\n }\n }\n\n public static fromNodeNextRequest(\n request: NodeNextRequest,\n signal: AbortSignal\n ): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: BodyInit | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) {\n // @ts-expect-error - this is handled by undici, when streams/web land use it instead\n body = request.body\n }\n\n let url: URL\n if (request.url.startsWith('http')) {\n url = new URL(request.url)\n } else {\n // Grab the full URL from the request metadata.\n const base = getRequestMeta(request, 'initURL')\n if (!base || !base.startsWith('http')) {\n // Because the URL construction relies on the fact that the URL provided\n // is absolute, we need to provide a base URL. We can't use the request\n // URL because it's relative, so we use a dummy URL instead.\n url = new URL(request.url, 'http://n')\n } else {\n url = new URL(request.url, base)\n }\n }\n\n return new NextRequest(url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n // @ts-expect-error - see https://github.com/whatwg/fetch/pull/1457\n duplex: 'half',\n signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n\n public static fromWebNextRequest(request: WebNextRequest): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: ReadableStream | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD') {\n body = request.body\n }\n\n return new NextRequest(request.url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n // @ts-expect-error - see https://github.com/whatwg/fetch/pull/1457\n duplex: 'half',\n signal: request.request.signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(request.request.signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n}\n","// Combined load times for loading client components\nlet clientComponentLoadStart = 0\nlet clientComponentLoadTimes = 0\nlet clientComponentLoadCount = 0\n\nexport function wrapClientComponentLoader(ComponentMod: any) {\n if (!('performance' in globalThis)) {\n return ComponentMod.__next_app__\n }\n\n return {\n require: (...args: any[]) => {\n const startTime = performance.now()\n\n if (clientComponentLoadStart === 0) {\n clientComponentLoadStart = startTime\n }\n\n try {\n clientComponentLoadCount += 1\n return ComponentMod.__next_app__.require(...args)\n } finally {\n clientComponentLoadTimes += performance.now() - startTime\n }\n },\n loadChunk: (...args: any[]) => {\n const startTime = performance.now()\n try {\n return ComponentMod.__next_app__.loadChunk(...args)\n } finally {\n clientComponentLoadTimes += performance.now() - startTime\n }\n },\n }\n}\n\nexport function getClientComponentLoaderMetrics(\n options: { reset?: boolean } = {}\n) {\n const metrics =\n clientComponentLoadStart === 0\n ? undefined\n : {\n clientComponentLoadStart,\n clientComponentLoadTimes,\n clientComponentLoadCount,\n }\n\n if (options.reset) {\n clientComponentLoadStart = 0\n clientComponentLoadTimes = 0\n clientComponentLoadCount = 0\n }\n\n return metrics\n}\n","import type { ServerResponse } from 'node:http'\n\nimport {\n ResponseAbortedName,\n createAbortController,\n} from './web/spec-extension/adapters/next-request'\nimport { DetachedPromise } from '../lib/detached-promise'\nimport { getTracer } from './lib/trace/tracer'\nimport { NextNodeServerSpan } from './lib/trace/constants'\nimport { getClientComponentLoaderMetrics } from './client-component-renderer-logger'\n\nexport function isAbortError(e: any): e is Error & { name: 'AbortError' } {\n return e?.name === 'AbortError' || e?.name === ResponseAbortedName\n}\n\nfunction createWriterFromResponse(\n res: ServerResponse,\n waitUntilForEnd?: Promise<unknown>\n): WritableStream<Uint8Array> {\n let started = false\n\n // Create a promise that will resolve once the response has drained. See\n // https://nodejs.org/api/stream.html#stream_event_drain\n let drained = new DetachedPromise<void>()\n function onDrain() {\n drained.resolve()\n }\n res.on('drain', onDrain)\n\n // If the finish event fires, it means we shouldn't block and wait for the\n // drain event.\n res.once('close', () => {\n res.off('drain', onDrain)\n drained.resolve()\n })\n\n // Create a promise that will resolve once the response has finished. See\n // https://nodejs.org/api/http.html#event-finish_1\n const finished = new DetachedPromise<void>()\n res.once('finish', () => {\n finished.resolve()\n })\n\n // Create a writable stream that will write to the response.\n return new WritableStream<Uint8Array>({\n write: async (chunk) => {\n // You'd think we'd want to use `start` instead of placing this in `write`\n // but this ensures that we don't actually flush the headers until we've\n // started writing chunks.\n if (!started) {\n started = true\n\n if (\n 'performance' in globalThis &&\n process.env.NEXT_OTEL_PERFORMANCE_PREFIX\n ) {\n const metrics = getClientComponentLoaderMetrics()\n if (metrics) {\n performance.measure(\n `${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,\n {\n start: metrics.clientComponentLoadStart,\n end:\n metrics.clientComponentLoadStart +\n metrics.clientComponentLoadTimes,\n }\n )\n }\n }\n\n res.flushHeaders()\n getTracer().trace(\n NextNodeServerSpan.startResponse,\n {\n spanName: 'start response',\n },\n () => undefined\n )\n }\n\n try {\n const ok = res.write(chunk)\n\n // Added by the `compression` middleware, this is a function that will\n // flush the partially-compressed response to the client.\n if ('flush' in res && typeof res.flush === 'function') {\n res.flush()\n }\n\n // If the write returns false, it means there's some backpressure, so\n // wait until it's streamed before continuing.\n if (!ok) {\n await drained.promise\n\n // Reset the drained promise so that we can wait for the next drain event.\n drained = new DetachedPromise<void>()\n }\n } catch (err) {\n res.end()\n throw new Error('failed to write chunk to response', { cause: err })\n }\n },\n abort: (err) => {\n if (res.writableFinished) return\n\n res.destroy(err)\n },\n close: async () => {\n // if a waitUntil promise was passed, wait for it to resolve before\n // ending the response.\n if (waitUntilForEnd) {\n await waitUntilForEnd\n }\n\n if (res.writableFinished) return\n\n res.end()\n return finished.promise\n },\n })\n}\n\nexport async function pipeToNodeResponse(\n readable: ReadableStream<Uint8Array>,\n res: ServerResponse,\n waitUntilForEnd?: Promise<unknown>\n) {\n try {\n // If the response has already errored, then just return now.\n const { errored, destroyed } = res\n if (errored || destroyed) return\n\n // Create a new AbortController so that we can abort the readable if the\n // client disconnects.\n const controller = createAbortController(res)\n\n const writer = createWriterFromResponse(res, waitUntilForEnd)\n\n await readable.pipeTo(writer, { signal: controller.signal })\n } catch (err: any) {\n // If this isn't related to an abort error, re-throw it.\n if (isAbortError(err)) return\n\n throw new Error('failed to pipe response', { cause: err })\n }\n}\n","import type { OutgoingHttpHeaders, ServerResponse } from 'http'\nimport type { Revalidate } from './lib/revalidate'\nimport type { FetchMetrics } from './base-http'\n\nimport {\n chainStreams,\n streamFromBuffer,\n streamFromString,\n streamToBuffer,\n streamToString,\n} from './stream-utils/node-web-streams-helper'\nimport { isAbortError, pipeToNodeResponse } from './pipe-readable'\nimport type { RenderResumeDataCache } from './resume-data-cache/resume-data-cache'\n\ntype ContentTypeOption = string | undefined\n\nexport type AppPageRenderResultMetadata = {\n flightData?: Buffer\n revalidate?: Revalidate\n staticBailoutInfo?: {\n stack?: string\n description?: string\n }\n\n /**\n * The postponed state if the render had postponed and needs to be resumed.\n */\n postponed?: string\n\n /**\n * The headers to set on the response that were added by the render.\n */\n headers?: OutgoingHttpHeaders\n fetchTags?: string\n fetchMetrics?: FetchMetrics\n\n segmentData?: Map<string, Buffer>\n\n /**\n * In development, the cache is warmed up before the render. This is attached\n * to the metadata so that it can be used during the render.\n */\n devRenderResumeDataCache?: RenderResumeDataCache\n}\n\nexport type PagesRenderResultMetadata = {\n pageData?: any\n revalidate?: Revalidate\n assetQueryString?: string\n isNotFound?: boolean\n isRedirect?: boolean\n}\n\nexport type StaticRenderResultMetadata = {}\n\nexport type RenderResultMetadata = AppPageRenderResultMetadata &\n PagesRenderResultMetadata &\n StaticRenderResultMetadata\n\nexport type RenderResultResponse =\n | ReadableStream<Uint8Array>[]\n | ReadableStream<Uint8Array>\n | string\n | Buffer\n | null\n\nexport type RenderResultOptions<\n Metadata extends RenderResultMetadata = RenderResultMetadata,\n> = {\n contentType?: ContentTypeOption\n waitUntil?: Promise<unknown>\n metadata: Metadata\n}\n\nexport default class RenderResult<\n Metadata extends RenderResultMetadata = RenderResultMetadata,\n> {\n /**\n * The detected content type for the response. This is used to set the\n * `Content-Type` header.\n */\n public readonly contentType: ContentTypeOption\n\n /**\n * The metadata for the response. This is used to set the revalidation times\n * and other metadata.\n */\n public readonly metadata: Readonly<Metadata>\n\n /**\n * The response itself. This can be a string, a stream, or null. If it's a\n * string, then it's a static response. If it's a stream, then it's a\n * dynamic response. If it's null, then the response was not found or was\n * already sent.\n */\n private response: RenderResultResponse\n\n /**\n * Creates a new RenderResult instance from a static response.\n *\n * @param value the static response value\n * @returns a new RenderResult instance\n */\n public static fromStatic(value: string | Buffer) {\n return new RenderResult<StaticRenderResultMetadata>(value, { metadata: {} })\n }\n\n private readonly waitUntil?: Promise<unknown>\n\n constructor(\n response: RenderResultResponse,\n { contentType, waitUntil, metadata }: RenderResultOptions<Metadata>\n ) {\n this.response = response\n this.contentType = contentType\n this.metadata = metadata\n this.waitUntil = waitUntil\n }\n\n public assignMetadata(metadata: Metadata) {\n Object.assign(this.metadata, metadata)\n }\n\n /**\n * Returns true if the response is null. It can be null if the response was\n * not found or was already sent.\n */\n public get isNull(): boolean {\n return this.response === null\n }\n\n /**\n * Returns false if the response is a string. It can be a string if the page\n * was prerendered. If it's not, then it was generated dynamically.\n */\n public get isDynamic(): boolean {\n return typeof this.response !== 'string'\n }\n\n public toUnchunkedBuffer(stream?: false): Buffer\n public toUnchunkedBuffer(stream: true): Promise<Buffer>\n public toUnchunkedBuffer(stream = false): Promise<Buffer> | Buffer {\n if (this.response === null) {\n throw new Error('Invariant: null responses cannot be unchunked')\n }\n\n if (typeof this.response !== 'string') {\n if (!stream) {\n throw new Error(\n 'Invariant: dynamic responses cannot be unchunked. This is a bug in Next.js'\n )\n }\n\n return streamToBuffer(this.readable)\n }\n\n return Buffer.from(this.response)\n }\n\n /**\n * Returns the response if it is a string. If the page was dynamic, this will\n * return a promise if the `stream` option is true, or it will throw an error.\n *\n * @param stream Whether or not to return a promise if the response is dynamic\n * @returns The response as a string\n */\n public toUnchunkedString(stream?: false): string\n public toUnchunkedString(stream: true): Promise<string>\n public toUnchunkedString(stream = false): Promise<string> | string {\n if (this.response === null) {\n throw new Error('Invariant: null responses cannot be unchunked')\n }\n\n if (typeof this.response !== 'string') {\n if (!stream) {\n throw new Error(\n 'Invariant: dynamic responses cannot be unchunked. This is a bug in Next.js'\n )\n }\n\n return streamToString(this.readable)\n }\n\n return this.response\n }\n\n /**\n * Returns the response if it is a stream, or throws an error if it is a\n * string.\n */\n private get readable(): ReadableStream<Uint8Array> {\n if (this.response === null) {\n throw new Error('Invariant: null responses cannot be streamed')\n }\n if (typeof this.response === 'string') {\n throw new Error('Invariant: static responses cannot be streamed')\n }\n\n if (Buffer.isBuffer(this.response)) {\n return streamFromBuffer(this.response)\n }\n\n // If the response is an array of streams, then chain them together.\n if (Array.isArray(this.response)) {\n return chainStreams(...this.response)\n }\n\n return this.response\n }\n\n /**\n * Chains a new stream to the response. This will convert the response to an\n * array of streams if it is not already one and will add the new stream to\n * the end. When this response is piped, all of the streams will be piped\n * one after the other.\n *\n * @param readable The new stream to chain\n */\n public chain(readable: ReadableStream<Uint8Array>) {\n if (this.response === null) {\n throw new Error('Invariant: response is null. This is a bug in Next.js')\n }\n\n // If the response is not an array of streams already, make it one.\n let responses: ReadableStream<Uint8Array>[]\n if (typeof this.response === 'string') {\n responses = [streamFromString(this.response)]\n } else if (Array.isArray(this.response)) {\n responses = this.response\n } else if (Buffer.isBuffer(this.response)) {\n responses = [streamFromBuffer(this.response)]\n } else {\n responses = [this.response]\n }\n\n // Add the new stream to the array.\n responses.push(readable)\n\n // Update the response.\n this.response = responses\n }\n\n /**\n * Pipes the response to a writable stream. This will close/cancel the\n * writable stream if an error is encountered. If this doesn't throw, then\n * the writable stream will be closed or aborted.\n *\n * @param writable Writable stream to pipe the response to\n */\n public async pipeTo(writable: WritableStream<Uint8Array>): Promise<void> {\n try {\n await this.readable.pipeTo(writable, {\n // We want to close the writable stream ourselves so that we can wait\n // for the waitUntil promise to resolve before closing it. If an error\n // is encountered, we'll abort the writable stream if we swallowed the\n // error.\n preventClose: true,\n })\n\n // If there is a waitUntil promise, wait for it to resolve before\n // closing the writable stream.\n if (this.waitUntil) await this.waitUntil\n\n // Close the writable stream.\n await writable.close()\n } catch (err) {\n // If this is an abort error, we should abort the writable stream (as we\n // took ownership of it when we started piping). We don't need to re-throw\n // because we handled the error.\n if (isAbortError(err)) {\n // Abort the writable stream if an error is encountered.\n await writable.abort(err)\n\n return\n }\n\n // We're not aborting the writer here as when this method throws it's not\n // clear as to how so the caller should assume it's their responsibility\n // to clean up the writer.\n throw err\n }\n }\n\n /**\n * Pipes the response to a node response. This will close/cancel the node\n * response if an error is encountered.\n *\n * @param res\n */\n public async pipeToNodeResponse(res: ServerResponse) {\n await pipeToNodeResponse(this.readable, res, this.waitUntil)\n }\n}\n","import type {\n WorkAsyncStorage,\n WorkStore,\n} from '../app-render/work-async-storage.external'\n\nimport { AppRenderSpan, NextNodeServerSpan } from './trace/constants'\nimport { getTracer, SpanKind } from './trace/tracer'\nimport {\n CACHE_ONE_YEAR,\n INFINITE_CACHE,\n NEXT_CACHE_TAG_MAX_ITEMS,\n NEXT_CACHE_TAG_MAX_LENGTH,\n} from '../../lib/constants'\nimport { markCurrentScopeAsDynamic } from '../app-render/dynamic-rendering'\nimport { makeHangingPromise } from '../dynamic-rendering-utils'\nimport type { FetchMetric } from '../base-http'\nimport { createDedupeFetch } from './dedupe-fetch'\nimport type {\n WorkUnitAsyncStorage,\n RequestStore,\n} from '../app-render/work-unit-async-storage.external'\nimport {\n CachedRouteKind,\n IncrementalCacheKind,\n type CachedFetchData,\n} from '../response-cache'\nimport { waitAtLeastOneReactRenderTask } from '../../lib/scheduler'\nimport { cloneResponse } from './clone-response'\n\nconst isEdgeRuntime = process.env.NEXT_RUNTIME === 'edge'\n\ntype Fetcher = typeof fetch\n\ntype PatchedFetcher = Fetcher & {\n readonly __nextPatched: true\n readonly __nextGetStaticStore: () => WorkAsyncStorage\n readonly _nextOriginalFetch: Fetcher\n}\n\nexport const NEXT_PATCH_SYMBOL = Symbol.for('next-patch')\n\nfunction isFetchPatched() {\n return (globalThis as Record<symbol, unknown>)[NEXT_PATCH_SYMBOL] === true\n}\n\nexport function validateRevalidate(\n revalidateVal: unknown,\n route: string\n): undefined | number {\n try {\n let normalizedRevalidate: number | undefined = undefined\n\n if (revalidateVal === false) {\n normalizedRevalidate = INFINITE_CACHE\n } else if (\n typeof revalidateVal === 'number' &&\n !isNaN(revalidateVal) &&\n revalidateVal > -1\n ) {\n normalizedRevalidate = revalidateVal\n } else if (typeof revalidateVal !== 'undefined') {\n throw new Error(\n `Invalid revalidate value \"${revalidateVal}\" on \"${route}\", must be a non-negative number or false`\n )\n }\n return normalizedRevalidate\n } catch (err: any) {\n // handle client component error from attempting to check revalidate value\n if (err instanceof Error && err.message.includes('Invalid revalidate')) {\n throw err\n }\n return undefined\n }\n}\n\nexport function validateTags(tags: any[], description: string) {\n const validTags: string[] = []\n const invalidTags: Array<{\n tag: any\n reason: string\n }> = []\n\n for (let i = 0; i < tags.length; i++) {\n const tag = tags[i]\n\n if (typeof tag !== 'string') {\n invalidTags.push({ tag, reason: 'invalid type, must be a string' })\n } else if (tag.length > NEXT_CACHE_TAG_MAX_LENGTH) {\n invalidTags.push({\n tag,\n reason: `exceeded max length of ${NEXT_CACHE_TAG_MAX_LENGTH}`,\n })\n } else {\n validTags.push(tag)\n }\n\n if (validTags.length > NEXT_CACHE_TAG_MAX_ITEMS) {\n console.warn(\n `Warning: exceeded max tag count for ${description}, dropped tags:`,\n tags.slice(i).join(', ')\n )\n break\n }\n }\n\n if (invalidTags.length > 0) {\n console.warn(`Warning: invalid tags passed to ${description}: `)\n\n for (const { tag, reason } of invalidTags) {\n console.log(`tag: \"${tag}\" ${reason}`)\n }\n }\n return validTags\n}\n\nfunction trackFetchMetric(\n workStore: WorkStore,\n ctx: Omit<FetchMetric, 'end' | 'idx'>\n) {\n // If the static generation store is not available, we can't track the fetch\n if (!workStore) return\n if (workStore.requestEndedState?.ended) return\n\n const isDebugBuild =\n (!!process.env.NEXT_DEBUG_BUILD ||\n process.env.NEXT_SSG_FETCH_METRICS === '1') &&\n workStore.isStaticGeneration\n const isDevelopment = process.env.NODE_ENV === 'development'\n\n if (\n // The only time we want to track fetch metrics outside of development is when\n // we are performing a static generation & we are in debug mode.\n !isDebugBuild &&\n !isDevelopment\n ) {\n return\n }\n\n workStore.fetchMetrics ??= []\n\n workStore.fetchMetrics.push({\n ...ctx,\n end: performance.timeOrigin + performance.now(),\n idx: workStore.nextFetchId || 0,\n })\n}\n\ninterface PatchableModule {\n workAsyncStorage: WorkAsyncStorage\n workUnitAsyncStorage: WorkUnitAsyncStorage\n}\n\nexport function createPatchedFetcher(\n originFetch: Fetcher,\n { workAsyncStorage, workUnitAsyncStorage }: PatchableModule\n): PatchedFetcher {\n // Create the patched fetch function. We don't set the type here, as it's\n // verified as the return value of this function.\n const patched = async (\n input: RequestInfo | URL,\n init: RequestInit | undefined\n ) => {\n let url: URL | undefined\n try {\n url = new URL(input instanceof Request ? input.url : input)\n url.username = ''\n url.password = ''\n } catch {\n // Error caused by malformed URL should be handled by native fetch\n url = undefined\n }\n const fetchUrl = url?.href ?? ''\n const method = init?.method?.toUpperCase() || 'GET'\n\n // Do create a new span trace for internal fetches in the\n // non-verbose mode.\n const isInternal = (init?.next as any)?.internal === true\n const hideSpan = process.env.NEXT_OTEL_FETCH_DISABLED === '1'\n // We don't track fetch metrics for internal fetches\n // so it's not critical that we have a start time, as it won't be recorded.\n // This is to workaround a flaky issue where performance APIs might\n // not be available and will require follow-up investigation.\n const fetchStart: number | undefined = isInternal\n ? undefined\n : performance.timeOrigin + performance.now()\n\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n // During static generation we track cache reads so we can reason about when they fill\n let cacheSignal =\n workUnitStore && workUnitStore.type === 'prerender'\n ? workUnitStore.cacheSignal\n : null\n if (cacheSignal) {\n cacheSignal.beginRead()\n }\n\n const result = getTracer().trace(\n isInternal ? NextNodeServerSpan.internalFetch : AppRenderSpan.fetch,\n {\n hideSpan,\n kind: SpanKind.CLIENT,\n spanName: ['fetch', method, fetchUrl].filter(Boolean).join(' '),\n attributes: {\n 'http.url': fetchUrl,\n 'http.method': method,\n 'net.peer.name': url?.hostname,\n 'net.peer.port': url?.port || undefined,\n },\n },\n async () => {\n // If this is an internal fetch, we should not do any special treatment.\n if (isInternal) {\n return originFetch(input, init)\n }\n\n // If the workStore is not available, we can't do any\n // special treatment of fetch, therefore fallback to the original\n // fetch implementation.\n if (!workStore) {\n return originFetch(input, init)\n }\n\n // We should also fallback to the original fetch implementation if we\n // are in draft mode, it does not constitute a static generation.\n if (workStore.isDraftMode) {\n return originFetch(input, init)\n }\n\n const isRequestInput =\n input &&\n typeof input === 'object' &&\n typeof (input as Request).method === 'string'\n\n const getRequestMeta = (field: string) => {\n // If request input is present but init is not, retrieve from input first.\n const value = (init as any)?.[field]\n return value || (isRequestInput ? (input as any)[field] : null)\n }\n\n let finalRevalidate: number | undefined = undefined\n const getNextField = (field: 'revalidate' | 'tags') => {\n return typeof init?.next?.[field] !== 'undefined'\n ? init?.next?.[field]\n : isRequestInput\n ? (input as any).next?.[field]\n : undefined\n }\n // RequestInit doesn't keep extra fields e.g. next so it's\n // only available if init is used separate\n let currentFetchRevalidate = getNextField('revalidate')\n const tags: string[] = validateTags(\n getNextField('tags') || [],\n `fetch ${input.toString()}`\n )\n\n const revalidateStore =\n workUnitStore &&\n (workUnitStore.type === 'cache' ||\n workUnitStore.type === 'prerender' ||\n workUnitStore.type === 'prerender-ppr' ||\n workUnitStore.type === 'prerender-legacy')\n ? workUnitStore\n : undefined\n\n if (revalidateStore) {\n if (Array.isArray(tags)) {\n // Collect tags onto parent caches or parent prerenders.\n const collectedTags =\n revalidateStore.tags ?? (revalidateStore.tags = [])\n for (const tag of tags) {\n if (!collectedTags.includes(tag)) {\n collectedTags.push(tag)\n }\n }\n }\n }\n\n const implicitTags =\n !workUnitStore || workUnitStore.type === 'unstable-cache'\n ? []\n : workUnitStore.implicitTags\n\n // Inside unstable-cache we treat it the same as force-no-store on the\n // page.\n const pageFetchCacheMode =\n workUnitStore && workUnitStore.type === 'unstable-cache'\n ? 'force-no-store'\n : workStore.fetchCache\n\n const isUsingNoStore = !!workStore.isUnstableNoStore\n\n let currentFetchCacheConfig = getRequestMeta('cache')\n let cacheReason = ''\n let cacheWarning: string | undefined\n\n if (\n typeof currentFetchCacheConfig === 'string' &&\n typeof currentFetchRevalidate !== 'undefined'\n ) {\n // If the revalidate value conflicts with the cache value, we should warn the user and unset the conflicting values.\n const isConflictingRevalidate =\n // revalidate: 0 and cache: force-cache\n (currentFetchCacheConfig === 'force-cache' &&\n currentFetchRevalidate === 0) ||\n // revalidate: >0 or revalidate: false and cache: no-store\n (currentFetchCacheConfig === 'no-store' &&\n (currentFetchRevalidate > 0 || currentFetchRevalidate === false))\n\n if (isConflictingRevalidate) {\n cacheWarning = `Specified \"cache: ${currentFetchCacheConfig}\" and \"revalidate: ${currentFetchRevalidate}\", only one should be specified.`\n currentFetchCacheConfig = undefined\n currentFetchRevalidate = undefined\n }\n }\n\n const hasExplicitFetchCacheOptOut =\n // fetch config itself signals not to cache\n currentFetchCacheConfig === 'no-cache' ||\n currentFetchCacheConfig === 'no-store' ||\n // the fetch isn't explicitly caching and the segment level cache config signals not to cache\n // note: `pageFetchCacheMode` is also set by being in an unstable_cache context.\n pageFetchCacheMode === 'force-no-store' ||\n pageFetchCacheMode === 'only-no-store'\n\n // If no explicit fetch cache mode is set, but dynamic = `force-dynamic` is set,\n // we shouldn't consider caching the fetch. This is because the `dynamic` cache\n // is considered a \"top-level\" cache mode, whereas something like `fetchCache` is more\n // fine-grained. Top-level modes are responsible for setting reasonable defaults for the\n // other configurations.\n const noFetchConfigAndForceDynamic =\n !pageFetchCacheMode &&\n !currentFetchCacheConfig &&\n !currentFetchRevalidate &&\n workStore.forceDynamic\n\n if (\n // force-cache was specified without a revalidate value. We set the revalidate value to false\n // which will signal the cache to not revalidate\n currentFetchCacheConfig === 'force-cache' &&\n typeof currentFetchRevalidate === 'undefined'\n ) {\n currentFetchRevalidate = false\n } else if (\n // if we are inside of \"use cache\"/\"unstable_cache\"\n // we shouldn't set the revalidate to 0 as it's overridden\n // by the cache context\n workUnitStore?.type !== 'cache' &&\n (hasExplicitFetchCacheOptOut || noFetchConfigAndForceDynamic)\n ) {\n currentFetchRevalidate = 0\n }\n\n if (\n currentFetchCacheConfig === 'no-cache' ||\n currentFetchCacheConfig === 'no-store'\n ) {\n cacheReason = `cache: ${currentFetchCacheConfig}`\n }\n\n finalRevalidate = validateRevalidate(\n currentFetchRevalidate,\n workStore.route\n )\n\n const _headers = getRequestMeta('headers')\n const initHeaders: Headers =\n typeof _headers?.get === 'function'\n ? _headers\n : new Headers(_headers || {})\n\n const hasUnCacheableHeader =\n initHeaders.get('authorization') || initHeaders.get('cookie')\n\n const isUnCacheableMethod = !['get', 'head'].includes(\n getRequestMeta('method')?.toLowerCase() || 'get'\n )\n\n /**\n * We automatically disable fetch caching under the following conditions:\n * - Fetch cache configs are not set. Specifically:\n * - A page fetch cache mode is not set (export const fetchCache=...)\n * - A fetch cache mode is not set in the fetch call (fetch(url, { cache: ... }))\n * or the fetch cache mode is set to 'default'\n * - A fetch revalidate value is not set in the fetch call (fetch(url, { revalidate: ... }))\n * - OR the fetch comes after a configuration that triggered dynamic rendering (e.g., reading cookies())\n * and the fetch was considered uncacheable (e.g., POST method or has authorization headers)\n */\n const hasNoExplicitCacheConfig =\n // eslint-disable-next-line eqeqeq\n pageFetchCacheMode == undefined &&\n // eslint-disable-next-line eqeqeq\n (currentFetchCacheConfig == undefined ||\n // when considering whether to opt into the default \"no-cache\" fetch semantics,\n // a \"default\" cache config should be treated the same as no cache config\n currentFetchCacheConfig === 'default') &&\n // eslint-disable-next-line eqeqeq\n currentFetchRevalidate == undefined\n const autoNoCache =\n // this condition is hit for null/undefined\n // eslint-disable-next-line eqeqeq\n (hasNoExplicitCacheConfig &&\n // we disable automatic no caching behavior during build time SSG so that we can still\n // leverage the fetch cache between SSG workers\n !workStore.isPrerendering) ||\n ((hasUnCacheableHeader || isUnCacheableMethod) &&\n revalidateStore &&\n revalidateStore.revalidate === 0)\n\n if (\n hasNoExplicitCacheConfig &&\n workUnitStore !== undefined &&\n workUnitStore.type === 'prerender'\n ) {\n // If we have no cache config, and we're in Dynamic I/O prerendering, it'll be a dynamic call.\n // We don't have to issue that dynamic call.\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n return makeHangingPromise<Response>(\n workUnitStore.renderSignal,\n 'fetch()'\n )\n }\n\n switch (pageFetchCacheMode) {\n case 'force-no-store': {\n cacheReason = 'fetchCache = force-no-store'\n break\n }\n case 'only-no-store': {\n if (\n currentFetchCacheConfig === 'force-cache' ||\n (typeof finalRevalidate !== 'undefined' && finalRevalidate > 0)\n ) {\n throw new Error(\n `cache: 'force-cache' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-no-store'`\n )\n }\n cacheReason = 'fetchCache = only-no-store'\n break\n }\n case 'only-cache': {\n if (currentFetchCacheConfig === 'no-store') {\n throw new Error(\n `cache: 'no-store' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-cache'`\n )\n }\n break\n }\n case 'force-cache': {\n if (\n typeof currentFetchRevalidate === 'undefined' ||\n currentFetchRevalidate === 0\n ) {\n cacheReason = 'fetchCache = force-cache'\n finalRevalidate = INFINITE_CACHE\n }\n break\n }\n default:\n // sometimes we won't match the above cases. the reason we don't move\n // everything to this switch is the use of autoNoCache which is not a fetchCacheMode\n // I suspect this could be unified with fetchCacheMode however in which case we could\n // simplify the switch case and ensure we have an exhaustive switch handling all modes\n }\n\n if (typeof finalRevalidate === 'undefined') {\n if (pageFetchCacheMode === 'default-cache' && !isUsingNoStore) {\n finalRevalidate = INFINITE_CACHE\n cacheReason = 'fetchCache = default-cache'\n } else if (pageFetchCacheMode === 'default-no-store') {\n finalRevalidate = 0\n cacheReason = 'fetchCache = default-no-store'\n } else if (isUsingNoStore) {\n finalRevalidate = 0\n cacheReason = 'noStore call'\n } else if (autoNoCache) {\n finalRevalidate = 0\n cacheReason = 'auto no cache'\n } else {\n // TODO: should we consider this case an invariant?\n cacheReason = 'auto cache'\n finalRevalidate = revalidateStore\n ? revalidateStore.revalidate\n : INFINITE_CACHE\n }\n } else if (!cacheReason) {\n cacheReason = `revalidate: ${finalRevalidate}`\n }\n\n if (\n // when force static is configured we don't bail from\n // `revalidate: 0` values\n !(workStore.forceStatic && finalRevalidate === 0) &&\n // we don't consider autoNoCache to switch to dynamic for ISR\n !autoNoCache &&\n // If the revalidate value isn't currently set or the value is less\n // than the current revalidate value, we should update the revalidate\n // value.\n revalidateStore &&\n finalRevalidate < revalidateStore.revalidate\n ) {\n // If we were setting the revalidate value to 0, we should try to\n // postpone instead first.\n if (finalRevalidate === 0) {\n if (workUnitStore && workUnitStore.type === 'prerender') {\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n return makeHangingPromise<Response>(\n workUnitStore.renderSignal,\n 'fetch()'\n )\n } else {\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `revalidate: 0 fetch ${input} ${workStore.route}`\n )\n }\n }\n\n // We only want to set the revalidate store's revalidate time if it\n // was explicitly set for the fetch call, i.e. currentFetchRevalidate.\n if (revalidateStore && currentFetchRevalidate === finalRevalidate) {\n revalidateStore.revalidate = finalRevalidate\n }\n }\n\n const isCacheableRevalidate =\n typeof finalRevalidate === 'number' && finalRevalidate > 0\n\n let cacheKey: string | undefined\n const { incrementalCache } = workStore\n\n const requestStore: undefined | RequestStore =\n workUnitStore !== undefined && workUnitStore.type === 'request'\n ? workUnitStore\n : undefined\n\n if (\n incrementalCache &&\n (isCacheableRevalidate || requestStore?.serverComponentsHmrCache)\n ) {\n try {\n cacheKey = await incrementalCache.generateCacheKey(\n fetchUrl,\n isRequestInput ? (input as RequestInit) : init\n )\n } catch (err) {\n console.error(`Failed to generate cache key for`, input)\n }\n }\n\n const fetchIdx = workStore.nextFetchId ?? 1\n workStore.nextFetchId = fetchIdx + 1\n\n let handleUnlock = () => Promise.resolve()\n\n const doOriginalFetch = async (\n isStale?: boolean,\n cacheReasonOverride?: string\n ) => {\n const requestInputFields = [\n 'cache',\n 'credentials',\n 'headers',\n 'integrity',\n 'keepalive',\n 'method',\n 'mode',\n 'redirect',\n 'referrer',\n 'referrerPolicy',\n 'window',\n 'duplex',\n\n // don't pass through signal when revalidating\n ...(isStale ? [] : ['signal']),\n ]\n\n if (isRequestInput) {\n const reqInput: Request = input as any\n const reqOptions: RequestInit = {\n body: (reqInput as any)._ogBody || reqInput.body,\n }\n\n for (const field of requestInputFields) {\n // @ts-expect-error custom fields\n reqOptions[field] = reqInput[field]\n }\n input = new Request(reqInput.url, reqOptions)\n } else if (init) {\n const { _ogBody, body, signal, ...otherInput } =\n init as RequestInit & { _ogBody?: any }\n init = {\n ...otherInput,\n body: _ogBody || body,\n signal: isStale ? undefined : signal,\n }\n }\n\n // add metadata to init without editing the original\n const clonedInit = {\n ...init,\n next: { ...init?.next, fetchType: 'origin', fetchIdx },\n }\n\n return originFetch(input, clonedInit)\n .then(async (res) => {\n if (!isStale && fetchStart) {\n trackFetchMetric(workStore, {\n start: fetchStart,\n url: fetchUrl,\n cacheReason: cacheReasonOverride || cacheReason,\n cacheStatus:\n finalRevalidate === 0 || cacheReasonOverride\n ? 'skip'\n : 'miss',\n cacheWarning,\n status: res.status,\n method: clonedInit.method || 'GET',\n })\n }\n if (\n res.status === 200 &&\n incrementalCache &&\n cacheKey &&\n (isCacheableRevalidate ||\n requestStore?.serverComponentsHmrCache)\n ) {\n const normalizedRevalidate =\n finalRevalidate >= INFINITE_CACHE\n ? CACHE_ONE_YEAR\n : finalRevalidate\n const externalRevalidate =\n finalRevalidate >= INFINITE_CACHE ? false : finalRevalidate\n\n if (workUnitStore && workUnitStore.type === 'prerender') {\n // We are prerendering at build time or revalidate time with dynamicIO so we need to\n // buffer the response so we can guarantee it can be read in a microtask\n const bodyBuffer = await res.arrayBuffer()\n\n const fetchedData = {\n headers: Object.fromEntries(res.headers.entries()),\n body: Buffer.from(bodyBuffer).toString('base64'),\n status: res.status,\n url: res.url,\n }\n\n // We can skip checking the serverComponentsHmrCache because we aren't in\n // dev mode.\n\n await incrementalCache.set(\n cacheKey,\n {\n kind: CachedRouteKind.FETCH,\n data: fetchedData,\n revalidate: normalizedRevalidate,\n },\n {\n fetchCache: true,\n revalidate: externalRevalidate,\n fetchUrl,\n fetchIdx,\n tags,\n }\n )\n await handleUnlock()\n\n // We return a new Response to the caller.\n return new Response(bodyBuffer, {\n headers: res.headers,\n status: res.status,\n statusText: res.statusText,\n })\n } else {\n // We're cloning the response using this utility because there\n // exists a bug in the undici library around response cloning.\n // See the following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n\n const [cloned1, cloned2] = cloneResponse(res)\n\n // We are dynamically rendering including dev mode. We want to return\n // the response to the caller as soon as possible because it might stream\n // over a very long time.\n cloned1\n .arrayBuffer()\n .then(async (arrayBuffer) => {\n const bodyBuffer = Buffer.from(arrayBuffer)\n\n const fetchedData = {\n headers: Object.fromEntries(cloned1.headers.entries()),\n body: bodyBuffer.toString('base64'),\n status: cloned1.status,\n url: cloned1.url,\n }\n\n requestStore?.serverComponentsHmrCache?.set(\n cacheKey,\n fetchedData\n )\n\n if (isCacheableRevalidate) {\n await incrementalCache.set(\n cacheKey,\n {\n kind: CachedRouteKind.FETCH,\n data: fetchedData,\n revalidate: normalizedRevalidate,\n },\n {\n fetchCache: true,\n revalidate: externalRevalidate,\n fetchUrl,\n fetchIdx,\n tags,\n }\n )\n }\n })\n .catch((error) =>\n console.warn(`Failed to set fetch cache`, input, error)\n )\n .finally(handleUnlock)\n\n return cloned2\n }\n }\n\n // we had response that we determined shouldn't be cached so we return it\n // and don't cache it. This also needs to unlock the cache lock we acquired.\n await handleUnlock()\n\n return res\n })\n .catch((error) => {\n handleUnlock()\n throw error\n })\n }\n\n let cacheReasonOverride\n let isForegroundRevalidate = false\n let isHmrRefreshCache = false\n\n if (cacheKey && incrementalCache) {\n let cachedFetchData: CachedFetchData | undefined\n\n if (\n requestStore?.isHmrRefresh &&\n requestStore.serverComponentsHmrCache\n ) {\n cachedFetchData =\n requestStore.serverComponentsHmrCache.get(cacheKey)\n\n isHmrRefreshCache = true\n }\n\n if (isCacheableRevalidate && !cachedFetchData) {\n handleUnlock = await incrementalCache.lock(cacheKey)\n const entry = workStore.isOnDemandRevalidate\n ? null\n : await incrementalCache.get(cacheKey, {\n kind: IncrementalCacheKind.FETCH,\n revalidate: finalRevalidate,\n fetchUrl,\n fetchIdx,\n tags,\n softTags: implicitTags,\n isFallback: false,\n })\n\n if (hasNoExplicitCacheConfig) {\n // We sometimes use the cache to dedupe fetches that do not specify a cache configuration\n // In these cases we want to make sure we still exclude them from prerenders if dynamicIO is on\n // so we introduce an artificial Task boundary here.\n if (workUnitStore && workUnitStore.type === 'prerender') {\n await waitAtLeastOneReactRenderTask()\n }\n }\n\n if (entry) {\n await handleUnlock()\n } else {\n // in dev, incremental cache response will be null in case the browser adds `cache-control: no-cache` in the request headers\n cacheReasonOverride = 'cache-control: no-cache (hard refresh)'\n }\n\n if (entry?.value && entry.value.kind === CachedRouteKind.FETCH) {\n // when stale and is revalidating we wait for fresh data\n // so the revalidated entry has the updated data\n if (workStore.isRevalidate && entry.isStale) {\n isForegroundRevalidate = true\n } else {\n if (entry.isStale) {\n workStore.pendingRevalidates ??= {}\n if (!workStore.pendingRevalidates[cacheKey]) {\n const pendingRevalidate = doOriginalFetch(true)\n .then(async (response) => ({\n body: await response.arrayBuffer(),\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n }))\n .finally(() => {\n workStore.pendingRevalidates ??= {}\n delete workStore.pendingRevalidates[cacheKey || '']\n })\n\n // Attach the empty catch here so we don't get a \"unhandled\n // promise rejection\" warning.\n pendingRevalidate.catch(console.error)\n\n workStore.pendingRevalidates[cacheKey] = pendingRevalidate\n }\n }\n\n cachedFetchData = entry.value.data\n }\n }\n }\n\n if (cachedFetchData) {\n if (fetchStart) {\n trackFetchMetric(workStore, {\n start: fetchStart,\n url: fetchUrl,\n cacheReason,\n cacheStatus: isHmrRefreshCache ? 'hmr' : 'hit',\n cacheWarning,\n status: cachedFetchData.status || 200,\n method: init?.method || 'GET',\n })\n }\n\n const response = new Response(\n Buffer.from(cachedFetchData.body, 'base64'),\n {\n headers: cachedFetchData.headers,\n status: cachedFetchData.status,\n }\n )\n\n Object.defineProperty(response, 'url', {\n value: cachedFetchData.url,\n })\n\n return response\n }\n }\n\n if (workStore.isStaticGeneration && init && typeof init === 'object') {\n const { cache } = init\n\n // Delete `cache` property as Cloudflare Workers will throw an error\n if (isEdgeRuntime) delete init.cache\n\n if (cache === 'no-store') {\n // If enabled, we should bail out of static generation.\n if (workUnitStore && workUnitStore.type === 'prerender') {\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n return makeHangingPromise<Response>(\n workUnitStore.renderSignal,\n 'fetch()'\n )\n } else {\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `no-store fetch ${input} ${workStore.route}`\n )\n }\n }\n\n const hasNextConfig = 'next' in init\n const { next = {} } = init\n if (\n typeof next.revalidate === 'number' &&\n revalidateStore &&\n next.revalidate < revalidateStore.revalidate\n ) {\n if (next.revalidate === 0) {\n // If enabled, we should bail out of static generation.\n if (workUnitStore && workUnitStore.type === 'prerender') {\n return makeHangingPromise<Response>(\n workUnitStore.renderSignal,\n 'fetch()'\n )\n } else {\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `revalidate: 0 fetch ${input} ${workStore.route}`\n )\n }\n }\n\n if (!workStore.forceStatic || next.revalidate !== 0) {\n revalidateStore.revalidate = next.revalidate\n }\n }\n if (hasNextConfig) delete init.next\n }\n\n // if we are revalidating the whole page via time or on-demand and\n // the fetch cache entry is stale we should still de-dupe the\n // origin hit if it's a cache-able entry\n if (cacheKey && isForegroundRevalidate) {\n const pendingRevalidateKey = cacheKey\n workStore.pendingRevalidates ??= {}\n let pendingRevalidate =\n workStore.pendingRevalidates[pendingRevalidateKey]\n\n if (pendingRevalidate) {\n const revalidatedResult: {\n body: ArrayBuffer\n headers: Headers\n status: number\n statusText: string\n } = await pendingRevalidate\n return new Response(revalidatedResult.body, {\n headers: revalidatedResult.headers,\n status: revalidatedResult.status,\n statusText: revalidatedResult.statusText,\n })\n }\n\n // We used to just resolve the Response and clone it however for\n // static generation with dynamicIO we need the response to be able to\n // be resolved in a microtask and cloning the response will never have\n // a body that can resolve in a microtask in node (as observed through\n // experimentation) So instead we await the body and then when it is\n // available we construct manually cloned Response objects with the\n // body as an ArrayBuffer. This will be resolvable in a microtask\n // making it compatible with dynamicIO.\n const pendingResponse = doOriginalFetch(true, cacheReasonOverride)\n // We're cloning the response using this utility because there\n // exists a bug in the undici library around response cloning.\n // See the following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n .then(cloneResponse)\n\n pendingRevalidate = pendingResponse\n .then(async (responses) => {\n const response = responses[0]\n return {\n body: await response.arrayBuffer(),\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n }\n })\n .finally(() => {\n // If the pending revalidate is not present in the store, then\n // we have nothing to delete.\n if (!workStore.pendingRevalidates?.[pendingRevalidateKey]) {\n return\n }\n\n delete workStore.pendingRevalidates[pendingRevalidateKey]\n })\n\n // Attach the empty catch here so we don't get a \"unhandled promise\n // rejection\" warning\n pendingRevalidate.catch(() => {})\n\n workStore.pendingRevalidates[pendingRevalidateKey] = pendingRevalidate\n\n return pendingResponse.then((responses) => responses[1])\n } else {\n return doOriginalFetch(false, cacheReasonOverride)\n }\n }\n )\n\n if (cacheSignal) {\n try {\n return await result\n } finally {\n if (cacheSignal) {\n cacheSignal.endRead()\n }\n }\n }\n return result\n }\n\n // Attach the necessary properties to the patched fetch function.\n // We don't use this to determine if the fetch function has been patched,\n // but for external consumers to determine if the fetch function has been\n // patched.\n patched.__nextPatched = true as const\n patched.__nextGetStaticStore = () => workAsyncStorage\n patched._nextOriginalFetch = originFetch\n ;(globalThis as Record<symbol, unknown>)[NEXT_PATCH_SYMBOL] = true\n\n return patched\n}\n// we patch fetch to collect cache information used for\n// determining if a page is static or not\nexport function patchFetch(options: PatchableModule) {\n // If we've already patched fetch, we should not patch it again.\n if (isFetchPatched()) return\n\n // Grab the original fetch function. We'll attach this so we can use it in\n // the patched fetch function.\n const original = createDedupeFetch(globalThis.fetch)\n\n // Set the global fetch to the patched fetch.\n globalThis.fetch = createPatchedFetcher(original, options)\n}\n","import { bold, green, magenta, red, yellow, white } from '../../lib/picocolors'\nimport { LRUCache } from '../../server/lib/lru-cache'\n\nexport const prefixes = {\n wait: white(bold('○')),\n error: red(bold('⨯')),\n warn: yellow(bold('⚠')),\n ready: '▲', // no color\n info: white(bold(' ')),\n event: green(bold('✓')),\n trace: magenta(bold('»')),\n} as const\n\nconst LOGGING_METHOD = {\n log: 'log',\n warn: 'warn',\n error: 'error',\n} as const\n\nfunction prefixedLog(prefixType: keyof typeof prefixes, ...message: any[]) {\n if ((message[0] === '' || message[0] === undefined) && message.length === 1) {\n message.shift()\n }\n\n const consoleMethod: keyof typeof LOGGING_METHOD =\n prefixType in LOGGING_METHOD\n ? LOGGING_METHOD[prefixType as keyof typeof LOGGING_METHOD]\n : 'log'\n\n const prefix = prefixes[prefixType]\n // If there's no message, don't print the prefix but a new line\n if (message.length === 0) {\n console[consoleMethod]('')\n } else {\n // Ensure if there's ANSI escape codes it's concatenated into one string.\n // Chrome DevTool can only handle color if it's in one string.\n if (message.length === 1 && typeof message[0] === 'string') {\n console[consoleMethod](' ' + prefix + ' ' + message[0])\n } else {\n console[consoleMethod](' ' + prefix, ...message)\n }\n }\n}\n\nexport function bootstrap(...message: string[]) {\n // logging format: ' <prefix> <message>'\n // e.g. ' ✓ Compiled successfully'\n // Add spaces to align with the indent of other logs\n console.log(' ' + message.join(' '))\n}\n\nexport function wait(...message: any[]) {\n prefixedLog('wait', ...message)\n}\n\nexport function error(...message: any[]) {\n prefixedLog('error', ...message)\n}\n\nexport function warn(...message: any[]) {\n prefixedLog('warn', ...message)\n}\n\nexport function ready(...message: any[]) {\n prefixedLog('ready', ...message)\n}\n\nexport function info(...message: any[]) {\n prefixedLog('info', ...message)\n}\n\nexport function event(...message: any[]) {\n prefixedLog('event', ...message)\n}\n\nexport function trace(...message: any[]) {\n prefixedLog('trace', ...message)\n}\n\nconst warnOnceCache = new LRUCache<string>(10_000, (value) => value.length)\nexport function warnOnce(...message: any[]) {\n const key = message.join(' ')\n if (!warnOnceCache.has(key)) {\n warnOnceCache.set(key, key)\n warn(...message)\n }\n}\n","export class LRUCache<T> {\n private cache: Map<string, T>\n private sizes: Map<string, number>\n private totalSize: number\n private maxSize: number\n private calculateSize: (value: T) => number\n\n constructor(maxSize: number, calculateSize?: (value: T) => number) {\n this.cache = new Map()\n this.sizes = new Map()\n this.totalSize = 0\n this.maxSize = maxSize\n this.calculateSize = calculateSize || (() => 1)\n }\n\n set(key?: string | null, value?: T): void {\n if (!key || !value) return\n\n const size = this.calculateSize(value)\n\n if (size > this.maxSize) {\n console.warn('Single item size exceeds maxSize')\n return\n }\n\n if (this.cache.has(key)) {\n this.totalSize -= this.sizes.get(key) || 0\n }\n\n this.cache.set(key, value)\n this.sizes.set(key, size)\n this.totalSize += size\n\n this.touch(key)\n }\n\n has(key?: string | null): boolean {\n if (!key) return false\n\n this.touch(key)\n return Boolean(this.cache.get(key))\n }\n\n get(key?: string | null): T | undefined {\n if (!key) return\n\n const value = this.cache.get(key)\n if (value === undefined) {\n return undefined\n }\n\n this.touch(key)\n return value\n }\n\n private touch(key: string): void {\n const value = this.cache.get(key)\n if (value !== undefined) {\n this.cache.delete(key)\n this.cache.set(key, value)\n this.evictIfNecessary()\n }\n }\n\n private evictIfNecessary(): void {\n while (this.totalSize > this.maxSize && this.cache.size > 0) {\n this.evictLeastRecentlyUsed()\n }\n }\n\n private evictLeastRecentlyUsed(): void {\n const lruKey = this.cache.keys().next().value\n if (lruKey !== undefined) {\n const lruSize = this.sizes.get(lruKey) || 0\n this.totalSize -= lruSize\n this.cache.delete(lruKey)\n this.sizes.delete(lruKey)\n }\n }\n\n reset() {\n this.cache.clear()\n this.sizes.clear()\n this.totalSize = 0\n }\n\n keys() {\n return [...this.cache.keys()]\n }\n\n remove(key: string): void {\n if (this.cache.has(key)) {\n this.totalSize -= this.sizes.get(key) || 0\n this.cache.delete(key)\n this.sizes.delete(key)\n }\n }\n\n clear(): void {\n this.cache.clear()\n this.sizes.clear()\n this.totalSize = 0\n }\n\n get size(): number {\n return this.cache.size\n }\n\n get currentSize(): number {\n return this.totalSize\n }\n}\n","import type { AppRouteHandlerFn, AppRouteHandlers } from '../module'\n\nimport { HTTP_METHODS, type HTTP_METHOD } from '../../../web/http'\n\nconst AUTOMATIC_ROUTE_METHODS = ['HEAD', 'OPTIONS'] as const\n\nfunction handleMethodNotAllowedResponse(): Response {\n return new Response(null, { status: 405 })\n}\n\nexport function autoImplementMethods(\n handlers: AppRouteHandlers\n): Record<HTTP_METHOD, AppRouteHandlerFn> {\n // Loop through all the HTTP methods to create the initial methods object.\n // Each of the methods will be set to the 405 response handler.\n const methods: Record<HTTP_METHOD, AppRouteHandlerFn> = HTTP_METHODS.reduce(\n (acc, method) => ({\n ...acc,\n // If the userland module implements the method, then use it. Otherwise,\n // use the 405 response handler.\n [method]: handlers[method] ?? handleMethodNotAllowedResponse,\n }),\n {} as Record<HTTP_METHOD, AppRouteHandlerFn>\n )\n\n // Get all the methods that could be automatically implemented that were not\n // implemented by the userland module.\n const implemented = new Set(HTTP_METHODS.filter((method) => handlers[method]))\n const missing = AUTOMATIC_ROUTE_METHODS.filter(\n (method) => !implemented.has(method)\n )\n\n // Loop over the missing methods to automatically implement them if we can.\n for (const method of missing) {\n // If the userland module doesn't implement the HEAD method, then\n // we'll automatically implement it by calling the GET method (if it\n // exists).\n if (method === 'HEAD') {\n if (handlers.GET) {\n // Implement the HEAD method by calling the GET method.\n methods.HEAD = handlers.GET\n\n // Mark it as implemented.\n implemented.add('HEAD')\n }\n continue\n }\n\n // If OPTIONS is not provided then implement it.\n if (method === 'OPTIONS') {\n // TODO: check if HEAD is implemented, if so, use it to add more headers\n\n // Get all the methods that were implemented by the userland module.\n const allow: HTTP_METHOD[] = ['OPTIONS', ...implemented]\n\n // If the list of methods doesn't include HEAD, but it includes GET, then\n // add HEAD as it's automatically implemented.\n if (!implemented.has('HEAD') && implemented.has('GET')) {\n allow.push('HEAD')\n }\n\n // Sort and join the list with commas to create the `Allow` header. See:\n // https://httpwg.org/specs/rfc9110.html#field.allow\n const headers = { Allow: allow.sort().join(', ') }\n\n // Implement the OPTIONS method by returning a 204 response with the\n // `Allow` header.\n methods.OPTIONS = () => new Response(null, { status: 204, headers })\n\n // Mark this method as implemented.\n implemented.add('OPTIONS')\n\n continue\n }\n\n throw new Error(\n `Invariant: should handle all automatic implementable methods, got method: ${method}`\n )\n }\n\n return methods\n}\n","const invalidServerComponentReactHooks = [\n 'useDeferredValue',\n 'useEffect',\n 'useImperativeHandle',\n 'useInsertionEffect',\n 'useLayoutEffect',\n 'useReducer',\n 'useRef',\n 'useState',\n 'useSyncExternalStore',\n 'useTransition',\n 'experimental_useOptimistic',\n 'useOptimistic',\n]\n\nfunction setMessage(error: Error, message: string): void {\n error.message = message\n if (error.stack) {\n const lines = error.stack.split('\\n')\n lines[0] = message\n error.stack = lines.join('\\n')\n }\n}\n\n/**\n * Input:\n * Error: Something went wrong\n at funcName (/path/to/file.js:10:5)\n at anotherFunc (/path/to/file.js:15:10)\n \n * Output:\n at funcName (/path/to/file.js:10:5)\n at anotherFunc (/path/to/file.js:15:10) \n */\nexport function getStackWithoutErrorMessage(error: Error): string {\n const stack = error.stack\n if (!stack) return ''\n return stack.replace(/^[^\\n]*\\n/, '')\n}\n\nexport function formatServerError(error: Error): void {\n if (typeof error?.message !== 'string') return\n\n if (\n error.message.includes(\n 'Class extends value undefined is not a constructor or null'\n )\n ) {\n const addedMessage =\n 'This might be caused by a React Class Component being rendered in a Server Component, React Class Components only works in Client Components. Read more: https://nextjs.org/docs/messages/class-component-in-server-component'\n\n // If this error instance already has the message, don't add it again\n if (error.message.includes(addedMessage)) return\n\n setMessage(\n error,\n `${error.message}\n\n${addedMessage}`\n )\n return\n }\n\n if (error.message.includes('createContext is not a function')) {\n setMessage(\n error,\n 'createContext only works in Client Components. Add the \"use client\" directive at the top of the file to use it. Read more: https://nextjs.org/docs/messages/context-in-server-component'\n )\n return\n }\n\n for (const clientHook of invalidServerComponentReactHooks) {\n const regex = new RegExp(`\\\\b${clientHook}\\\\b.*is not a function`)\n if (regex.test(error.message)) {\n setMessage(\n error,\n `${clientHook} only works in Client Components. Add the \"use client\" directive at the top of the file to use it. Read more: https://nextjs.org/docs/messages/react-client-hook-in-server-component`\n )\n return\n }\n }\n}\n","export const HTTPAccessErrorStatus = {\n NOT_FOUND: 404,\n FORBIDDEN: 403,\n UNAUTHORIZED: 401,\n}\n\nconst ALLOWED_CODES = new Set(Object.values(HTTPAccessErrorStatus))\n\nexport const HTTP_ERROR_FALLBACK_ERROR_CODE = 'NEXT_HTTP_ERROR_FALLBACK'\n\nexport type HTTPAccessFallbackError = Error & {\n digest: `${typeof HTTP_ERROR_FALLBACK_ERROR_CODE};${string}`\n}\n\n/**\n * Checks an error to determine if it's an error generated by\n * the HTTP navigation APIs `notFound()`, `forbidden()` or `unauthorized()`.\n *\n * @param error the error that may reference a HTTP access error\n * @returns true if the error is a HTTP access error\n */\nexport function isHTTPAccessFallbackError(\n error: unknown\n): error is HTTPAccessFallbackError {\n if (\n typeof error !== 'object' ||\n error === null ||\n !('digest' in error) ||\n typeof error.digest !== 'string'\n ) {\n return false\n }\n const [prefix, httpStatus] = error.digest.split(';')\n\n return (\n prefix === HTTP_ERROR_FALLBACK_ERROR_CODE &&\n ALLOWED_CODES.has(Number(httpStatus))\n )\n}\n\nexport function getAccessFallbackHTTPStatus(\n error: HTTPAccessFallbackError\n): number {\n const httpStatus = error.digest.split(';')[1]\n return Number(httpStatus)\n}\n\nexport function getAccessFallbackErrorTypeByStatus(\n status: number\n): 'not-found' | 'forbidden' | 'unauthorized' | undefined {\n switch (status) {\n case 401:\n return 'unauthorized'\n case 403:\n return 'forbidden'\n case 404:\n return 'not-found'\n default:\n return\n }\n}\n","export enum RedirectStatusCode {\n SeeOther = 303,\n TemporaryRedirect = 307,\n PermanentRedirect = 308,\n}\n","import { RedirectStatusCode } from './redirect-status-code'\n\nexport const REDIRECT_ERROR_CODE = 'NEXT_REDIRECT'\n\nexport enum RedirectType {\n push = 'push',\n replace = 'replace',\n}\n\nexport type RedirectError = Error & {\n digest: `${typeof REDIRECT_ERROR_CODE};${RedirectType};${string};${RedirectStatusCode};`\n}\n\n/**\n * Checks an error to determine if it's an error generated by the\n * `redirect(url)` helper.\n *\n * @param error the error that may reference a redirect error\n * @returns true if the error is a redirect error\n */\nexport function isRedirectError(error: unknown): error is RedirectError {\n if (\n typeof error !== 'object' ||\n error === null ||\n !('digest' in error) ||\n typeof error.digest !== 'string'\n ) {\n return false\n }\n\n const digest = error.digest.split(';')\n const [errorCode, type] = digest\n const destination = digest.slice(2, -2).join(';')\n const status = digest.at(-2)\n\n const statusCode = Number(status)\n\n return (\n errorCode === REDIRECT_ERROR_CODE &&\n (type === 'replace' || type === 'push') &&\n typeof destination === 'string' &&\n !isNaN(statusCode) &&\n statusCode in RedirectStatusCode\n )\n}\n","import { getDigestForWellKnownError } from './create-error-handler'\n\nexport function printDebugThrownValueForProspectiveRender(\n thrownValue: unknown,\n route: string\n) {\n // We don't need to print well-known Next.js errors.\n if (getDigestForWellKnownError(thrownValue)) {\n return\n }\n\n let message: undefined | string\n if (\n typeof thrownValue === 'object' &&\n thrownValue !== null &&\n typeof (thrownValue as any).message === 'string'\n ) {\n message = (thrownValue as any).message\n if (typeof (thrownValue as any).stack === 'string') {\n const originalErrorStack: string = (thrownValue as any).stack\n const stackStart = originalErrorStack.indexOf('\\n')\n if (stackStart > -1) {\n const error = new Error(\n `Route ${route} errored during the prospective render. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled.\n \nOriginal Error: ${message}`\n )\n error.stack =\n 'Error: ' + error.message + originalErrorStack.slice(stackStart)\n console.error(error)\n return\n }\n }\n } else if (typeof thrownValue === 'string') {\n message = thrownValue\n }\n\n if (message) {\n console.error(`Route ${route} errored during the prospective render. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. No stack was provided.\n \nOriginal Message: ${message}`)\n return\n }\n\n console.error(\n `Route ${route} errored during the prospective render. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. The thrown value is logged just following this message`\n )\n console.error(thrownValue)\n return\n}\n","import type { ErrorInfo } from 'react'\n\nimport stringHash from 'next/dist/compiled/string-hash'\nimport { formatServerError } from '../../lib/format-server-error'\nimport { SpanStatusCode, getTracer } from '../lib/trace/tracer'\nimport { isAbortError } from '../pipe-readable'\nimport { isBailoutToCSRError } from '../../shared/lib/lazy-dynamic/bailout-to-csr'\nimport { isDynamicServerError } from '../../client/components/hooks-server-context'\nimport { isNextRouterError } from '../../client/components/is-next-router-error'\nimport { getProperError } from '../../lib/is-error'\nimport { createDigestWithErrorCode } from '../../lib/error-telemetry-utils'\n\ndeclare global {\n var __next_log_error__: undefined | ((err: unknown) => void)\n}\n\ntype RSCErrorHandler = (err: unknown) => string | undefined\ntype SSRErrorHandler = (\n err: unknown,\n errorInfo?: ErrorInfo\n) => string | undefined\n\nexport type DigestedError = Error & { digest: string }\n\n/**\n * Returns a digest for well-known Next.js errors, otherwise `undefined`. If a\n * digest is returned this also means that the error does not need to be\n * reported.\n */\nexport function getDigestForWellKnownError(error: unknown): string | undefined {\n // If we're bailing out to CSR, we don't need to log the error.\n if (isBailoutToCSRError(error)) return error.digest\n\n // If this is a navigation error, we don't need to log the error.\n if (isNextRouterError(error)) return error.digest\n\n // If this error occurs, we know that we should be stopping the static\n // render. This is only thrown in static generation when PPR is not enabled,\n // which causes the whole page to be marked as dynamic. We don't need to\n // tell the user about this error, as it's not actionable.\n if (isDynamicServerError(error)) return error.digest\n\n return undefined\n}\n\nexport function createFlightReactServerErrorHandler(\n shouldFormatError: boolean,\n onReactServerRenderError: (err: DigestedError) => void\n): RSCErrorHandler {\n return (thrownValue: unknown) => {\n if (typeof thrownValue === 'string') {\n // TODO-APP: look at using webcrypto instead. Requires a promise to be awaited.\n return stringHash(thrownValue).toString()\n }\n\n // If the response was closed, we don't need to log the error.\n if (isAbortError(thrownValue)) return\n\n const digest = getDigestForWellKnownError(thrownValue)\n\n if (digest) {\n return digest\n }\n\n const err = getProperError(thrownValue) as DigestedError\n\n // If the error already has a digest, respect the original digest,\n // so it won't get re-generated into another new error.\n if (!err.digest) {\n // TODO-APP: look at using webcrypto instead. Requires a promise to be awaited.\n err.digest = stringHash(err.message + err.stack || '').toString()\n }\n\n // Format server errors in development to add more helpful error messages\n if (shouldFormatError) {\n formatServerError(err)\n }\n\n // Record exception in an active span, if available.\n const span = getTracer().getActiveScopeSpan()\n if (span) {\n span.recordException(err)\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n })\n }\n\n onReactServerRenderError(err)\n\n return createDigestWithErrorCode(thrownValue, err.digest)\n }\n}\n\nexport function createHTMLReactServerErrorHandler(\n shouldFormatError: boolean,\n isNextExport: boolean,\n reactServerErrors: Map<string, DigestedError>,\n silenceLogger: boolean,\n onReactServerRenderError: undefined | ((err: DigestedError) => void)\n): RSCErrorHandler {\n return (thrownValue: unknown) => {\n if (typeof thrownValue === 'string') {\n // TODO-APP: look at using webcrypto instead. Requires a promise to be awaited.\n return stringHash(thrownValue).toString()\n }\n\n // If the response was closed, we don't need to log the error.\n if (isAbortError(thrownValue)) return\n\n const digest = getDigestForWellKnownError(thrownValue)\n\n if (digest) {\n return digest\n }\n\n const err = getProperError(thrownValue) as DigestedError\n\n // If the error already has a digest, respect the original digest,\n // so it won't get re-generated into another new error.\n if (!err.digest) {\n // TODO-APP: look at using webcrypto instead. Requires a promise to be awaited.\n err.digest = stringHash(err.message + (err.stack || '')).toString()\n }\n\n // @TODO by putting this here and not at the top it is possible that\n // we don't error the build in places we actually expect to\n if (!reactServerErrors.has(err.digest)) {\n reactServerErrors.set(err.digest, err)\n }\n\n // Format server errors in development to add more helpful error messages\n if (shouldFormatError) {\n formatServerError(err)\n }\n\n // Don't log the suppressed error during export\n if (\n !(\n isNextExport &&\n err?.message?.includes(\n 'The specific message is omitted in production builds to avoid leaking sensitive details.'\n )\n )\n ) {\n // Record exception in an active span, if available.\n const span = getTracer().getActiveScopeSpan()\n if (span) {\n span.recordException(err)\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n })\n }\n\n if (!silenceLogger) {\n onReactServerRenderError?.(err)\n }\n }\n\n return createDigestWithErrorCode(thrownValue, err.digest)\n }\n}\n\nexport function createHTMLErrorHandler(\n shouldFormatError: boolean,\n isNextExport: boolean,\n reactServerErrors: Map<string, DigestedError>,\n allCapturedErrors: Array<unknown>,\n silenceLogger: boolean,\n onHTMLRenderSSRError: (err: DigestedError, errorInfo?: ErrorInfo) => void\n): SSRErrorHandler {\n return (thrownValue: unknown, errorInfo?: ErrorInfo) => {\n let isSSRError = true\n\n allCapturedErrors.push(thrownValue)\n\n // If the response was closed, we don't need to log the error.\n if (isAbortError(thrownValue)) return\n\n const digest = getDigestForWellKnownError(thrownValue)\n\n if (digest) {\n return digest\n }\n\n const err = getProperError(thrownValue) as DigestedError\n // If the error already has a digest, respect the original digest,\n // so it won't get re-generated into another new error.\n if (err.digest) {\n if (reactServerErrors.has(err.digest)) {\n // This error is likely an obfuscated error from react-server.\n // We recover the original error here.\n thrownValue = reactServerErrors.get(err.digest)\n isSSRError = false\n } else {\n // The error is not from react-server but has a digest\n // from other means so we don't need to produce a new one\n }\n } else {\n err.digest = stringHash(\n err.message + (errorInfo?.componentStack || err.stack || '')\n ).toString()\n }\n\n // Format server errors in development to add more helpful error messages\n if (shouldFormatError) {\n formatServerError(err)\n }\n\n // Don't log the suppressed error during export\n if (\n !(\n isNextExport &&\n err?.message?.includes(\n 'The specific message is omitted in production builds to avoid leaking sensitive details.'\n )\n )\n ) {\n // Record exception in an active span, if available.\n const span = getTracer().getActiveScopeSpan()\n if (span) {\n span.recordException(err)\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n })\n }\n\n if (\n !silenceLogger &&\n // HTML errors contain RSC errors as well, filter them out before reporting\n isSSRError\n ) {\n onHTMLRenderSSRError(err, errorInfo)\n }\n }\n\n return createDigestWithErrorCode(thrownValue, err.digest)\n }\n}\n\nexport function isUserLandError(err: any): boolean {\n return (\n !isAbortError(err) && !isBailoutToCSRError(err) && !isNextRouterError(err)\n )\n}\n","// This has to be a shared module which is shared between client component error boundary and dynamic component\nconst BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING'\n\n/** An error that should be thrown when we want to bail out to client-side rendering. */\nexport class BailoutToCSRError extends Error {\n public readonly digest = BAILOUT_TO_CSR\n\n constructor(public readonly reason: string) {\n super(`Bail out to client-side rendering: ${reason}`)\n }\n}\n\n/** Checks if a passed argument is an error that is thrown if we want to bail out to client-side rendering. */\nexport function isBailoutToCSRError(err: unknown): err is BailoutToCSRError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === BAILOUT_TO_CSR\n}\n","import {\n isHTTPAccessFallbackError,\n type HTTPAccessFallbackError,\n} from './http-access-fallback/http-access-fallback'\nimport { isRedirectError, type RedirectError } from './redirect-error'\n\n/**\n * Returns true if the error is a navigation signal error. These errors are\n * thrown by user code to perform navigation operations and interrupt the React\n * render.\n */\nexport function isNextRouterError(\n error: unknown\n): error is RedirectError | HTTPAccessFallbackError {\n return isRedirectError(error) || isHTTPAccessFallbackError(error)\n}\n","'use client'\n\nimport type { FetchServerResponseResult } from '../../client/components/router-reducer/fetch-server-response'\nimport type {\n FocusAndScrollRef,\n PrefetchKind,\n RouterChangeByServerResponse,\n} from '../../client/components/router-reducer/router-reducer-types'\nimport type {\n FlightRouterState,\n FlightSegmentPath,\n} from '../../server/app-render/types'\nimport React from 'react'\n\nexport type ChildSegmentMap = Map<string, CacheNode>\n\n/**\n * Cache node used in app-router / layout-router.\n */\nexport type CacheNode = ReadyCacheNode | LazyCacheNode\n\nexport type LoadingModuleData =\n | [React.JSX.Element, React.ReactNode, React.ReactNode]\n | null\n\n/** viewport metadata node */\nexport type HeadData = React.ReactNode\n\nexport type LazyCacheNode = {\n /**\n * When rsc is null, this is a lazily-initialized cache node.\n *\n * If the app attempts to render it, it triggers a lazy data fetch,\n * postpones the render, and schedules an update to a new tree.\n *\n * TODO: This mechanism should not be used when PPR is enabled, though it\n * currently is in some cases until we've implemented partial\n * segment fetching.\n */\n rsc: null\n\n /**\n * A prefetched version of the segment data. See explanation in corresponding\n * field of ReadyCacheNode (below).\n *\n * Since LazyCacheNode mostly only exists in the non-PPR implementation, this\n * will usually be null, but it could have been cloned from a previous\n * CacheNode that was created by the PPR implementation. Eventually we want\n * to migrate everything away from LazyCacheNode entirely.\n */\n prefetchRsc: React.ReactNode\n\n /**\n * A pending response for the lazy data fetch. If this is not present\n * during render, it is lazily created.\n */\n lazyData: Promise<FetchServerResponseResult> | null\n\n prefetchHead: HeadData | null\n\n head: HeadData\n\n loading: LoadingModuleData | Promise<LoadingModuleData>\n\n /**\n * Child parallel routes.\n */\n parallelRoutes: Map<string, ChildSegmentMap>\n}\n\nexport type ReadyCacheNode = {\n /**\n * When rsc is not null, it represents the RSC data for the\n * corresponding segment.\n *\n * `null` is a valid React Node but because segment data is always a\n * <LayoutRouter> component, we can use `null` to represent empty.\n *\n * TODO: For additional type safety, update this type to\n * Exclude<React.ReactNode, null>. Need to update createEmptyCacheNode to\n * accept rsc as an argument, or just inline the callers.\n */\n rsc: React.ReactNode\n\n /**\n * Represents a static version of the segment that can be shown immediately,\n * and may or may not contain dynamic holes. It's prefetched before a\n * navigation occurs.\n *\n * During rendering, we will choose whether to render `rsc` or `prefetchRsc`\n * with `useDeferredValue`. As with the `rsc` field, a value of `null` means\n * no value was provided. In this case, the LayoutRouter will go straight to\n * rendering the `rsc` value; if that one is also missing, it will suspend and\n * trigger a lazy fetch.\n */\n prefetchRsc: React.ReactNode\n\n /**\n * There should never be a lazy data request in this case.\n */\n lazyData: null\n prefetchHead: HeadData | null\n\n head: HeadData\n\n loading: LoadingModuleData | Promise<LoadingModuleData>\n\n parallelRoutes: Map<string, ChildSegmentMap>\n}\n\nexport interface NavigateOptions {\n scroll?: boolean\n}\n\nexport interface PrefetchOptions {\n kind: PrefetchKind\n}\n\nexport interface AppRouterInstance {\n /**\n * Navigate to the previous history entry.\n */\n back(): void\n /**\n * Navigate to the next history entry.\n */\n forward(): void\n /**\n * Refresh the current page.\n */\n refresh(): void\n /**\n * Refresh the current page. Use in development only.\n * @internal\n */\n hmrRefresh(): void\n /**\n * Navigate to the provided href.\n * Pushes a new history entry.\n */\n push(href: string, options?: NavigateOptions): void\n /**\n * Navigate to the provided href.\n * Replaces the current history entry.\n */\n replace(href: string, options?: NavigateOptions): void\n /**\n * Prefetch the provided href.\n */\n prefetch(href: string, options?: PrefetchOptions): void\n}\n\nexport const AppRouterContext = React.createContext<AppRouterInstance | null>(\n null\n)\nexport const LayoutRouterContext = React.createContext<{\n parentTree: FlightRouterState\n parentCacheNode: CacheNode\n parentSegmentPath: FlightSegmentPath | null\n url: string\n} | null>(null)\n\nexport const GlobalLayoutRouterContext = React.createContext<{\n tree: FlightRouterState\n changeByServerResponse: RouterChangeByServerResponse\n focusAndScrollRef: FocusAndScrollRef\n nextUrl: string | null\n}>(null as any)\n\nexport const TemplateContext = React.createContext<React.ReactNode>(null as any)\n\nif (process.env.NODE_ENV !== 'production') {\n AppRouterContext.displayName = 'AppRouterContext'\n LayoutRouterContext.displayName = 'LayoutRouterContext'\n GlobalLayoutRouterContext.displayName = 'GlobalLayoutRouterContext'\n TemplateContext.displayName = 'TemplateContext'\n}\n\nexport const MissingSlotContext = React.createContext<Set<string>>(new Set())\n","/**\n * This class is used to detect when all cache reads for a given render are settled.\n * We do this to allow for cache warming the prerender without having to continue rendering\n * the remainder of the page. This feature is really only useful when the dynamicIO flag is on\n * and should only be used in codepaths gated with this feature.\n */\n\nexport class CacheSignal {\n private count: number\n private earlyListeners: Array<() => void>\n private listeners: Array<() => void>\n private tickPending: boolean\n private taskPending: boolean\n\n constructor() {\n this.count = 0\n this.earlyListeners = []\n this.listeners = []\n this.tickPending = false\n this.taskPending = false\n }\n\n private noMorePendingCaches() {\n if (!this.tickPending) {\n this.tickPending = true\n process.nextTick(() => {\n this.tickPending = false\n if (this.count === 0) {\n for (let i = 0; i < this.earlyListeners.length; i++) {\n this.earlyListeners[i]()\n }\n this.earlyListeners.length = 0\n }\n })\n }\n if (!this.taskPending) {\n this.taskPending = true\n setTimeout(() => {\n this.taskPending = false\n if (this.count === 0) {\n for (let i = 0; i < this.listeners.length; i++) {\n this.listeners[i]()\n }\n this.listeners.length = 0\n }\n }, 0)\n }\n }\n\n /**\n * This promise waits until there are no more in progress cache reads but no later.\n * This allows for adding more cache reads after to delay cacheReady.\n */\n inputReady() {\n return new Promise<void>((resolve) => {\n this.earlyListeners.push(resolve)\n if (this.count === 0) {\n this.noMorePendingCaches()\n }\n })\n }\n\n /**\n * If there are inflight cache reads this Promise can resolve in a microtask however\n * if there are no inflight cache reads then we wait at least one task to allow initial\n * cache reads to be initiated.\n */\n cacheReady() {\n return new Promise<void>((resolve) => {\n this.listeners.push(resolve)\n if (this.count === 0) {\n this.noMorePendingCaches()\n }\n })\n }\n\n beginRead() {\n this.count++\n }\n\n endRead() {\n // If this is the last read we need to wait a task before we can claim the cache is settled.\n // The cache read will likely ping a Server Component which can read from the cache again and this\n // will play out in a microtask so we need to only resolve pending listeners if we're still at 0\n // after at least one task.\n // We only want one task scheduled at a time so when we hit count 1 we don't decrement the counter immediately.\n // If intervening reads happen before the scheduled task runs they will never observe count 1 preventing reentrency\n this.count--\n if (this.count === 0) {\n this.noMorePendingCaches()\n }\n }\n}\n","import { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport { afterTaskAsyncStorage } from '../app-render/after-task-async-storage.external'\n\n// This regex will have fast negatives meaning valid identifiers may not pass\n// this test. However this is only used during static generation to provide hints\n// about why a page bailed out of some or all prerendering and we can use bracket notation\n// for example while `ಠ_ಠ` is a valid identifier it's ok to print `searchParams['ಠ_ಠ']`\n// even if this would have been fine too `searchParams.ಠ_ಠ`\nconst isDefinitelyAValidIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/\n\nexport function describeStringPropertyAccess(target: string, prop: string) {\n if (isDefinitelyAValidIdentifier.test(prop)) {\n return `\\`${target}.${prop}\\``\n }\n return `\\`${target}[${JSON.stringify(prop)}]\\``\n}\n\nexport function describeHasCheckingStringProperty(\n target: string,\n prop: string\n) {\n const stringifiedProp = JSON.stringify(prop)\n return `\\`Reflect.has(${target}, ${stringifiedProp})\\`, \\`${stringifiedProp} in ${target}\\`, or similar`\n}\n\nexport function throwWithStaticGenerationBailoutError(\n route: string,\n expression: string\n): never {\n throw new StaticGenBailoutError(\n `Route ${route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n}\n\nexport function throwWithStaticGenerationBailoutErrorWithDynamicError(\n route: string,\n expression: string\n): never {\n throw new StaticGenBailoutError(\n `Route ${route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n}\n\nexport function isRequestAPICallableInsideAfter() {\n const afterTaskStore = afterTaskAsyncStorage.getStore()\n return afterTaskStore?.rootTaskSpawnPhase === 'action'\n}\n\nexport const wellKnownProperties = new Set([\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toString',\n 'valueOf',\n 'toLocaleString',\n\n // Promise prototype\n // fallthrough\n 'then',\n 'catch',\n 'finally',\n\n // React Promise extension\n // fallthrough\n 'status',\n\n // React introspection\n 'displayName',\n\n // Common tested properties\n // fallthrough\n 'toJSON',\n '$$typeof',\n '__esModule',\n])\n","import * as React from 'react'\n\nconst errorRef: { current: null | Error } = { current: null }\n\n// React.cache is currently only available in canary/experimental React channels.\nconst cache =\n typeof React.cache === 'function'\n ? React.cache\n : (fn: (key: unknown) => void) => fn\n\n// When Dynamic IO is enabled, we record these as errors so that they\n// are captured by the dev overlay as it's more critical to fix these\n// when enabled.\nconst logErrorOrWarn = process.env.__NEXT_DYNAMIC_IO\n ? console.error\n : console.warn\n\n// We don't want to dedupe across requests.\n// The developer might've just attempted to fix the warning so we should warn again if it still happens.\nconst flushCurrentErrorIfNew = cache(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- cache key\n (key: unknown) => {\n try {\n logErrorOrWarn(errorRef.current)\n } finally {\n errorRef.current = null\n }\n }\n)\n\n/**\n * Creates a function that logs an error message that is deduped by the userland\n * callsite.\n * This requires no indirection between the call of this function and the userland\n * callsite i.e. there's only a single library frame above this.\n * Do not use on the Client where sourcemaps and ignore listing might be enabled.\n * Only use that for warnings need a fix independent of the callstack.\n *\n * @param getMessage\n * @returns\n */\nexport function createDedupedByCallsiteServerErrorLoggerDev<Args extends any[]>(\n getMessage: (...args: Args) => Error\n) {\n return function logDedupedError(...args: Args) {\n const message = getMessage(...args)\n\n if (process.env.NODE_ENV !== 'production') {\n const callStackFrames = new Error().stack?.split('\\n')\n if (callStackFrames === undefined || callStackFrames.length < 4) {\n logErrorOrWarn(message)\n } else {\n // Error:\n // logDedupedError\n // asyncApiBeingAccessedSynchronously\n // <userland callsite>\n // TODO: This breaks if sourcemaps with ignore lists are enabled.\n const key = callStackFrames[4]\n errorRef.current = message\n flushCurrentErrorIfNew(key)\n }\n } else {\n logErrorOrWarn(message)\n }\n }\n}\n","import type { WorkStore } from '../app-render/work-async-storage.external'\nimport type { FallbackRouteParams } from './fallback-params'\n\nimport { ReflectAdapter } from '../web/spec-extension/adapters/reflect'\nimport {\n abortAndThrowOnSynchronousRequestDataAccess,\n throwToInterruptStaticGeneration,\n postponeWithTracking,\n trackSynchronousRequestDataAccessInDev,\n} from '../app-render/dynamic-rendering'\n\nimport {\n workUnitAsyncStorage,\n type PrerenderStore,\n type PrerenderStorePPR,\n type PrerenderStoreLegacy,\n type PrerenderStoreModern,\n} from '../app-render/work-unit-async-storage.external'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { describeStringPropertyAccess, wellKnownProperties } from './utils'\nimport { makeHangingPromise } from '../dynamic-rendering-utils'\nimport { createDedupedByCallsiteServerErrorLoggerDev } from '../create-deduped-by-callsite-server-error-logger'\nimport { scheduleImmediate } from '../../lib/scheduler'\n\nexport type ParamValue = string | Array<string> | undefined\nexport type Params = Record<string, ParamValue>\n\n/**\n * In this version of Next.js the `params` prop passed to Layouts, Pages, and other Segments is a Promise.\n * However to facilitate migration to this new Promise type you can currently still access params directly on the Promise instance passed to these Segments.\n * The `UnsafeUnwrappedParams` type is available if you need to temporarily access the underlying params without first awaiting or `use`ing the Promise.\n *\n * In a future version of Next.js the `params` prop will be a plain Promise and this type will be removed.\n *\n * Typically instances of `params` can be updated automatically to be treated as a Promise by a codemod published alongside this Next.js version however if you\n * have not yet run the codemod of the codemod cannot detect certain instances of `params` usage you should first try to refactor your code to await `params`.\n *\n * If refactoring is not possible but you still want to be able to access params directly without typescript errors you can cast the params Promise to this type\n *\n * ```tsx\n * type Props = { params: Promise<{ id: string }>}\n *\n * export default async function Layout(props: Props) {\n * const directParams = (props.params as unknown as UnsafeUnwrappedParams<typeof props.params>)\n * return ...\n * }\n * ```\n *\n * This type is marked deprecated to help identify it as target for refactoring away.\n *\n * @deprecated\n */\nexport type UnsafeUnwrappedParams<P> =\n P extends Promise<infer U> ? Omit<U, 'then' | 'status' | 'value'> : never\n\nexport function createParamsFromClient(\n underlyingParams: Params,\n workStore: WorkStore\n) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-ppr':\n case 'prerender-legacy':\n return createPrerenderParams(underlyingParams, workStore, workUnitStore)\n default:\n // fallthrough\n }\n }\n return createRenderParams(underlyingParams, workStore)\n}\n\n// generateMetadata always runs in RSC context so it is equivalent to a Server Page Component\nexport type CreateServerParamsForMetadata = typeof createServerParamsForMetadata\nexport const createServerParamsForMetadata = createServerParamsForServerSegment\n\n// routes always runs in RSC context so it is equivalent to a Server Page Component\nexport function createServerParamsForRoute(\n underlyingParams: Params,\n workStore: WorkStore\n) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-ppr':\n case 'prerender-legacy':\n return createPrerenderParams(underlyingParams, workStore, workUnitStore)\n default:\n // fallthrough\n }\n }\n return createRenderParams(underlyingParams, workStore)\n}\n\nexport function createServerParamsForServerSegment(\n underlyingParams: Params,\n workStore: WorkStore\n): Promise<Params> {\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-ppr':\n case 'prerender-legacy':\n return createPrerenderParams(underlyingParams, workStore, workUnitStore)\n default:\n // fallthrough\n }\n }\n return createRenderParams(underlyingParams, workStore)\n}\n\nexport function createPrerenderParamsForClientSegment(\n underlyingParams: Params,\n workStore: WorkStore\n): Promise<Params> {\n const prerenderStore = workUnitAsyncStorage.getStore()\n if (prerenderStore && prerenderStore.type === 'prerender') {\n const fallbackParams = workStore.fallbackRouteParams\n if (fallbackParams) {\n for (let key in underlyingParams) {\n if (fallbackParams.has(key)) {\n // This params object has one of more fallback params so we need to consider\n // the awaiting of this params object \"dynamic\". Since we are in dynamicIO mode\n // we encode this as a promise that never resolves\n return makeHangingPromise(prerenderStore.renderSignal, '`params`')\n }\n }\n }\n }\n // We're prerendering in a mode that does not abort. We resolve the promise without\n // any tracking because we're just transporting a value from server to client where the tracking\n // will be applied.\n return Promise.resolve(underlyingParams)\n}\n\nfunction createPrerenderParams(\n underlyingParams: Params,\n workStore: WorkStore,\n prerenderStore: PrerenderStore\n): Promise<Params> {\n const fallbackParams = workStore.fallbackRouteParams\n if (fallbackParams) {\n let hasSomeFallbackParams = false\n for (const key in underlyingParams) {\n if (fallbackParams.has(key)) {\n hasSomeFallbackParams = true\n break\n }\n }\n\n if (hasSomeFallbackParams) {\n // params need to be treated as dynamic because we have at least one fallback param\n if (prerenderStore.type === 'prerender') {\n // We are in a dynamicIO (PPR or otherwise) prerender\n return makeAbortingExoticParams(\n underlyingParams,\n workStore.route,\n prerenderStore\n )\n }\n // remaining cases are prerender-ppr and prerender-legacy\n // We aren't in a dynamicIO prerender but we do have fallback params at this\n // level so we need to make an erroring exotic params object which will postpone\n // if you access the fallback params\n return makeErroringExoticParams(\n underlyingParams,\n fallbackParams,\n workStore,\n prerenderStore\n )\n }\n }\n\n // We don't have any fallback params so we have an entirely static safe params object\n return makeUntrackedExoticParams(underlyingParams)\n}\n\nfunction createRenderParams(\n underlyingParams: Params,\n workStore: WorkStore\n): Promise<Params> {\n if (process.env.NODE_ENV === 'development' && !workStore.isPrefetchRequest) {\n return makeDynamicallyTrackedExoticParamsWithDevWarnings(\n underlyingParams,\n workStore\n )\n } else {\n return makeUntrackedExoticParams(underlyingParams)\n }\n}\n\ninterface CacheLifetime {}\nconst CachedParams = new WeakMap<CacheLifetime, Promise<Params>>()\n\nfunction makeAbortingExoticParams(\n underlyingParams: Params,\n route: string,\n prerenderStore: PrerenderStoreModern\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const promise = makeHangingPromise<Params>(\n prerenderStore.renderSignal,\n '`params`'\n )\n CachedParams.set(underlyingParams, promise)\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n Object.defineProperty(promise, prop, {\n get() {\n const expression = describeStringPropertyAccess('params', prop)\n const error = createParamsAccessError(route, expression)\n abortAndThrowOnSynchronousRequestDataAccess(\n route,\n expression,\n error,\n prerenderStore\n )\n },\n set(newValue) {\n Object.defineProperty(promise, prop, {\n value: newValue,\n writable: true,\n enumerable: true,\n })\n },\n enumerable: true,\n configurable: true,\n })\n }\n })\n\n return promise\n}\n\nfunction makeErroringExoticParams(\n underlyingParams: Params,\n fallbackParams: FallbackRouteParams,\n workStore: WorkStore,\n prerenderStore: PrerenderStorePPR | PrerenderStoreLegacy\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const augmentedUnderlying = { ...underlyingParams }\n\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = Promise.resolve(augmentedUnderlying)\n CachedParams.set(underlyingParams, promise)\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n if (fallbackParams.has(prop)) {\n Object.defineProperty(augmentedUnderlying, prop, {\n get() {\n const expression = describeStringPropertyAccess('params', prop)\n // In most dynamic APIs we also throw if `dynamic = \"error\"` however\n // for params is only dynamic when we're generating a fallback shell\n // and even when `dynamic = \"error\"` we still support generating dynamic\n // fallback shells\n // TODO remove this comment when dynamicIO is the default since there\n // will be no `dynamic = \"error\"`\n if (prerenderStore.type === 'prerender-ppr') {\n // PPR Prerender (no dynamicIO)\n postponeWithTracking(\n workStore.route,\n expression,\n prerenderStore.dynamicTracking\n )\n } else {\n // Legacy Prerender\n throwToInterruptStaticGeneration(\n expression,\n workStore,\n prerenderStore\n )\n }\n },\n enumerable: true,\n })\n Object.defineProperty(promise, prop, {\n get() {\n const expression = describeStringPropertyAccess('params', prop)\n // In most dynamic APIs we also throw if `dynamic = \"error\"` however\n // for params is only dynamic when we're generating a fallback shell\n // and even when `dynamic = \"error\"` we still support generating dynamic\n // fallback shells\n // TODO remove this comment when dynamicIO is the default since there\n // will be no `dynamic = \"error\"`\n if (prerenderStore.type === 'prerender-ppr') {\n // PPR Prerender (no dynamicIO)\n postponeWithTracking(\n workStore.route,\n expression,\n prerenderStore.dynamicTracking\n )\n } else {\n // Legacy Prerender\n throwToInterruptStaticGeneration(\n expression,\n workStore,\n prerenderStore\n )\n }\n },\n set(newValue) {\n Object.defineProperty(promise, prop, {\n value: newValue,\n writable: true,\n enumerable: true,\n })\n },\n enumerable: true,\n configurable: true,\n })\n } else {\n ;(promise as any)[prop] = underlyingParams[prop]\n }\n }\n })\n\n return promise\n}\n\nfunction makeUntrackedExoticParams(underlyingParams: Params): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = Promise.resolve(underlyingParams)\n CachedParams.set(underlyingParams, promise)\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n ;(promise as any)[prop] = underlyingParams[prop]\n }\n })\n\n return promise\n}\n\nfunction makeDynamicallyTrackedExoticParamsWithDevWarnings(\n underlyingParams: Params,\n store: WorkStore\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = new Promise<Params>((resolve) =>\n scheduleImmediate(() => resolve(underlyingParams))\n )\n\n const proxiedProperties = new Set<string>()\n const unproxiedProperties: Array<string> = []\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n unproxiedProperties.push(prop)\n } else {\n proxiedProperties.add(prop)\n ;(promise as any)[prop] = underlyingParams[prop]\n }\n })\n\n const proxiedPromise = new Proxy(promise, {\n get(target, prop, receiver) {\n if (typeof prop === 'string') {\n if (\n // We are accessing a property that was proxied to the promise instance\n proxiedProperties.has(prop)\n ) {\n const expression = describeStringPropertyAccess('params', prop)\n syncIODev(store.route, expression)\n }\n }\n return ReflectAdapter.get(target, prop, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'string') {\n proxiedProperties.delete(prop)\n }\n return ReflectAdapter.set(target, prop, value, receiver)\n },\n ownKeys(target) {\n const expression = '`...params` or similar expression'\n syncIODev(store.route, expression, unproxiedProperties)\n return Reflect.ownKeys(target)\n },\n })\n\n CachedParams.set(underlyingParams, proxiedPromise)\n return proxiedPromise\n}\n\nfunction syncIODev(\n route: string | undefined,\n expression: string,\n missingProperties?: Array<string>\n) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (\n workUnitStore &&\n workUnitStore.type === 'request' &&\n workUnitStore.prerenderPhase === true\n ) {\n // When we're rendering dynamically in dev we need to advance out of the\n // Prerender environment when we read Request data synchronously\n const requestStore = workUnitStore\n trackSynchronousRequestDataAccessInDev(requestStore)\n }\n // In all cases we warn normally\n if (missingProperties && missingProperties.length > 0) {\n warnForIncompleteEnumeration(route, expression, missingProperties)\n } else {\n warnForSyncAccess(route, expression)\n }\n}\n\nconst warnForSyncAccess = createDedupedByCallsiteServerErrorLoggerDev(\n createParamsAccessError\n)\n\nconst warnForIncompleteEnumeration =\n createDedupedByCallsiteServerErrorLoggerDev(createIncompleteEnumerationError)\n\nfunction createParamsAccessError(\n route: string | undefined,\n expression: string\n) {\n const prefix = route ? `Route \"${route}\" ` : 'This route '\n return new Error(\n `${prefix}used ${expression}. ` +\n `\\`params\\` should be awaited before using its properties. ` +\n `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`\n )\n}\n\nfunction createIncompleteEnumerationError(\n route: string | undefined,\n expression: string,\n missingProperties: Array<string>\n) {\n const prefix = route ? `Route \"${route}\" ` : 'This route '\n return new Error(\n `${prefix}used ${expression}. ` +\n `\\`params\\` should be awaited before using its properties. ` +\n `The following properties were not available through enumeration ` +\n `because they conflict with builtin property names: ` +\n `${describeListOfPropertyNames(missingProperties)}. ` +\n `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`\n )\n}\n\nfunction describeListOfPropertyNames(properties: Array<string>) {\n switch (properties.length) {\n case 0:\n throw new InvariantError(\n 'Expected describeListOfPropertyNames to be called with a non-empty list of strings.'\n )\n case 1:\n return `\\`${properties[0]}\\``\n case 2:\n return `\\`${properties[0]}\\` and \\`${properties[1]}\\``\n default: {\n let description = ''\n for (let i = 0; i < properties.length - 1; i++) {\n description += `\\`${properties[i]}\\`, `\n }\n description += `, and \\`${properties[properties.length - 1]}\\``\n return description\n }\n }\n}\n","import type { NextConfig } from '../../config-shared'\nimport type { AppRouteRouteDefinition } from '../../route-definitions/app-route-route-definition'\nimport type { AppSegmentConfig } from '../../../build/segment-config/app/app-segment-config'\nimport type { NextRequest } from '../../web/spec-extension/request'\nimport type { PrerenderManifest } from '../../../build'\nimport type { NextURL } from '../../web/next-url'\nimport type { DeepReadonly } from '../../../shared/lib/deep-readonly'\nimport type { WorkUnitStore } from '../../app-render/work-unit-async-storage.external'\n\nimport {\n RouteModule,\n type RouteModuleHandleContext,\n type RouteModuleOptions,\n} from '../route-module'\nimport { createRequestStoreForAPI } from '../../async-storage/request-store'\nimport {\n createWorkStore,\n type WorkStoreContext,\n} from '../../async-storage/work-store'\nimport { type HTTP_METHOD, HTTP_METHODS, isHTTPMethod } from '../../web/http'\nimport { getImplicitTags } from '../../lib/implicit-tags'\nimport { patchFetch } from '../../lib/patch-fetch'\nimport { getTracer } from '../../lib/trace/tracer'\nimport { AppRouteRouteHandlersSpan } from '../../lib/trace/constants'\nimport { getPathnameFromAbsolutePath } from './helpers/get-pathname-from-absolute-path'\nimport * as Log from '../../../build/output/log'\nimport { autoImplementMethods } from './helpers/auto-implement-methods'\nimport {\n appendMutableCookies,\n type ReadonlyRequestCookies,\n} from '../../web/spec-extension/adapters/request-cookies'\nimport { HeadersAdapter } from '../../web/spec-extension/adapters/headers'\nimport { RequestCookiesAdapter } from '../../web/spec-extension/adapters/request-cookies'\nimport { parsedUrlQueryToParams } from './helpers/parsed-url-query-to-params'\nimport { printDebugThrownValueForProspectiveRender } from '../../app-render/prospective-render-utils'\n\nimport * as serverHooks from '../../../client/components/hooks-server-context'\nimport { DynamicServerError } from '../../../client/components/hooks-server-context'\n\nimport {\n workAsyncStorage,\n type WorkStore,\n} from '../../app-render/work-async-storage.external'\nimport {\n workUnitAsyncStorage,\n type RequestStore,\n type PrerenderStore,\n} from '../../app-render/work-unit-async-storage.external'\nimport {\n actionAsyncStorage,\n type ActionStore,\n} from '../../app-render/action-async-storage.external'\nimport * as sharedModules from './shared-modules'\nimport { getIsServerAction } from '../../lib/server-action-request-meta'\nimport { RequestCookies } from 'next/dist/compiled/@edge-runtime/cookies'\nimport { cleanURL } from './helpers/clean-url'\nimport { StaticGenBailoutError } from '../../../client/components/static-generation-bailout'\nimport { isStaticGenEnabled } from './helpers/is-static-gen-enabled'\nimport {\n abortAndThrowOnSynchronousRequestDataAccess,\n postponeWithTracking,\n createDynamicTrackingState,\n getFirstDynamicReason,\n} from '../../app-render/dynamic-rendering'\nimport { ReflectAdapter } from '../../web/spec-extension/adapters/reflect'\nimport type { RenderOptsPartial } from '../../app-render/types'\nimport { CacheSignal } from '../../app-render/cache-signal'\nimport { scheduleImmediate } from '../../../lib/scheduler'\nimport { createServerParamsForRoute } from '../../request/params'\nimport type { AppSegment } from '../../../build/segment-config/app/app-segments'\nimport {\n getRedirectStatusCodeFromError,\n getURLFromRedirectError,\n} from '../../../client/components/redirect'\nimport {\n isRedirectError,\n type RedirectError,\n} from '../../../client/components/redirect-error'\nimport {\n getAccessFallbackHTTPStatus,\n isHTTPAccessFallbackError,\n} from '../../../client/components/http-access-fallback/http-access-fallback'\nimport { RedirectStatusCode } from '../../../client/components/redirect-status-code'\nimport { INFINITE_CACHE } from '../../../lib/constants'\n\nexport class WrappedNextRouterError {\n constructor(\n public readonly error: RedirectError,\n public readonly headers?: Headers\n ) {}\n}\n\n/**\n * The AppRouteModule is the type of the module exported by the bundled App\n * Route module.\n */\nexport type AppRouteModule = typeof import('../../../build/templates/app-route')\n\nexport type AppRouteSharedContext = {\n buildId: string\n}\n\n/**\n * AppRouteRouteHandlerContext is the context that is passed to the route\n * handler for app routes.\n */\nexport interface AppRouteRouteHandlerContext extends RouteModuleHandleContext {\n renderOpts: WorkStoreContext['renderOpts'] &\n Pick<RenderOptsPartial, 'onInstrumentationRequestError'> &\n CollectedCacheInfo\n prerenderManifest: DeepReadonly<PrerenderManifest>\n sharedContext: AppRouteSharedContext\n}\n\ntype CollectedCacheInfo = {\n collectedTags?: string\n collectedRevalidate?: number\n collectedExpire?: number\n collectedStale?: number\n}\n\n/**\n * AppRouteHandlerFnContext is the context that is passed to the handler as the\n * second argument.\n */\ntype AppRouteHandlerFnContext = {\n params?: Promise<Record<string, string | string[] | undefined>>\n}\n\n/**\n * Handler function for app routes. If a non-Response value is returned, an error\n * will be thrown.\n */\nexport type AppRouteHandlerFn = (\n /**\n * Incoming request object.\n */\n req: NextRequest,\n /**\n * Context properties on the request (including the parameters if this was a\n * dynamic route).\n */\n ctx: AppRouteHandlerFnContext\n) => unknown\n\n/**\n * AppRouteHandlers describes the handlers for app routes that is provided by\n * the userland module.\n */\nexport type AppRouteHandlers = {\n [method in HTTP_METHOD]?: AppRouteHandlerFn\n}\n\n/**\n * AppRouteUserlandModule is the userland module that is provided for app\n * routes. This contains all the user generated code.\n */\nexport type AppRouteUserlandModule = AppRouteHandlers &\n Pick<\n AppSegmentConfig,\n 'dynamic' | 'revalidate' | 'dynamicParams' | 'fetchCache'\n > &\n Pick<AppSegment, 'generateStaticParams'>\n\n/**\n * AppRouteRouteModuleOptions is the options that are passed to the app route\n * module from the bundled code.\n */\nexport interface AppRouteRouteModuleOptions\n extends RouteModuleOptions<AppRouteRouteDefinition, AppRouteUserlandModule> {\n readonly resolvedPagePath: string\n readonly nextConfigOutput: NextConfig['output']\n}\n\n/**\n * AppRouteRouteHandler is the handler for app routes.\n */\nexport class AppRouteRouteModule extends RouteModule<\n AppRouteRouteDefinition,\n AppRouteUserlandModule\n> {\n /**\n * A reference to the request async storage.\n */\n public readonly workUnitAsyncStorage = workUnitAsyncStorage\n\n /**\n * A reference to the static generation async storage.\n */\n public readonly workAsyncStorage = workAsyncStorage\n\n /**\n * An interface to call server hooks which interact with the underlying\n * storage.\n */\n public readonly serverHooks = serverHooks\n\n public static readonly sharedModules = sharedModules\n\n /**\n * A reference to the mutation related async storage, such as mutations of\n * cookies.\n */\n public readonly actionAsyncStorage = actionAsyncStorage\n\n public readonly resolvedPagePath: string\n public readonly nextConfigOutput: NextConfig['output'] | undefined\n\n private readonly methods: Record<HTTP_METHOD, AppRouteHandlerFn>\n private readonly hasNonStaticMethods: boolean\n private readonly dynamic: AppRouteUserlandModule['dynamic']\n\n constructor({\n userland,\n definition,\n resolvedPagePath,\n nextConfigOutput,\n }: AppRouteRouteModuleOptions) {\n super({ userland, definition })\n\n this.resolvedPagePath = resolvedPagePath\n this.nextConfigOutput = nextConfigOutput\n\n // Automatically implement some methods if they aren't implemented by the\n // userland module.\n this.methods = autoImplementMethods(userland)\n\n // Get the non-static methods for this route.\n this.hasNonStaticMethods = hasNonStaticMethods(userland)\n\n // Get the dynamic property from the userland module.\n this.dynamic = this.userland.dynamic\n if (this.nextConfigOutput === 'export') {\n if (this.dynamic === 'force-dynamic') {\n throw new Error(\n `export const dynamic = \"force-dynamic\" on page \"${definition.pathname}\" cannot be used with \"output: export\". See more info here: https://nextjs.org/docs/advanced-features/static-html-export`\n )\n } else if (!isStaticGenEnabled(this.userland) && this.userland['GET']) {\n throw new Error(\n `export const dynamic = \"force-static\"/export const revalidate not configured on route \"${definition.pathname}\" with \"output: export\". See more info here: https://nextjs.org/docs/advanced-features/static-html-export`\n )\n } else {\n this.dynamic = 'error'\n }\n }\n\n // We only warn in development after here, so return if we're not in\n // development.\n if (process.env.NODE_ENV === 'development') {\n // Print error in development if the exported handlers are in lowercase, only\n // uppercase handlers are supported.\n const lowercased = HTTP_METHODS.map((method) => method.toLowerCase())\n for (const method of lowercased) {\n if (method in this.userland) {\n Log.error(\n `Detected lowercase method '${method}' in '${\n this.resolvedPagePath\n }'. Export the uppercase '${method.toUpperCase()}' method name to fix this error.`\n )\n }\n }\n\n // Print error if the module exports a default handler, they must use named\n // exports for each HTTP method.\n if ('default' in this.userland) {\n Log.error(\n `Detected default export in '${this.resolvedPagePath}'. Export a named export for each HTTP method instead.`\n )\n }\n\n // If there is no methods exported by this module, then return a not found\n // response.\n if (!HTTP_METHODS.some((method) => method in this.userland)) {\n Log.error(\n `No HTTP methods exported in '${this.resolvedPagePath}'. Export a named export for each HTTP method.`\n )\n }\n }\n }\n\n /**\n * Resolves the handler function for the given method.\n *\n * @param method the requested method\n * @returns the handler function for the given method\n */\n private resolve(method: string): AppRouteHandlerFn {\n // Ensure that the requested method is a valid method (to prevent RCE's).\n if (!isHTTPMethod(method)) return () => new Response(null, { status: 400 })\n\n // Return the handler.\n return this.methods[method]\n }\n\n private async do(\n handler: AppRouteHandlerFn,\n actionStore: ActionStore,\n workStore: WorkStore,\n // @TODO refactor to not take this argument but instead construct the RequestStore\n // inside this function. Right now we get passed a RequestStore even when\n // we're going to do a prerender. We should probably just split do up into prexecute and execute\n requestStore: RequestStore,\n implicitTags: string[],\n request: NextRequest,\n context: AppRouteRouteHandlerContext\n ) {\n const isStaticGeneration = workStore.isStaticGeneration\n const dynamicIOEnabled = !!context.renderOpts.experimental?.dynamicIO\n\n // Patch the global fetch.\n patchFetch({\n workAsyncStorage: this.workAsyncStorage,\n workUnitAsyncStorage: this.workUnitAsyncStorage,\n })\n\n const handlerContext: AppRouteHandlerFnContext = {\n params: context.params\n ? createServerParamsForRoute(\n parsedUrlQueryToParams(context.params),\n workStore\n )\n : undefined,\n }\n\n let prerenderStore: null | PrerenderStore = null\n\n let res: unknown\n try {\n if (isStaticGeneration) {\n const userlandRevalidate = this.userland.revalidate\n const defaultRevalidate: number =\n // If the static generation store does not have a revalidate value\n // set, then we should set it the revalidate value from the userland\n // module or default to false.\n userlandRevalidate === false || userlandRevalidate === undefined\n ? INFINITE_CACHE\n : userlandRevalidate\n\n if (dynamicIOEnabled) {\n /**\n * When we are attempting to statically prerender the GET handler of a route.ts module\n * and dynamicIO is on we follow a similar pattern to rendering.\n *\n * We first run the handler letting caches fill. If something synchronously dynamic occurs\n * during this prospective render then we can infer it will happen on every render and we\n * just bail out of prerendering.\n *\n * Next we run the handler again and we check if we get a result back in a microtask.\n * Next.js expects the return value to be a Response or a Thenable that resolves to a Response.\n * Unfortunately Response's do not allow for accessing the response body synchronously or in\n * a microtask so we need to allow one more task to unwrap the response body. This is a slightly\n * different semantic than what we have when we render and it means that certain tasks can still\n * execute before a prerender completes such as a carefully timed setImmediate.\n *\n * Functionally though IO should still take longer than the time it takes to unwrap the response body\n * so our heuristic of excluding any IO should be preserved.\n */\n const prospectiveController = new AbortController()\n let prospectiveRenderIsDynamic = false\n const cacheSignal = new CacheSignal()\n let dynamicTracking = createDynamicTrackingState(undefined)\n\n const prospectiveRoutePrerenderStore: PrerenderStore =\n (prerenderStore = {\n type: 'prerender',\n phase: 'action',\n implicitTags: implicitTags,\n renderSignal: prospectiveController.signal,\n controller: prospectiveController,\n cacheSignal,\n // During prospective render we don't use a controller\n // because we need to let all caches fill.\n dynamicTracking,\n revalidate: defaultRevalidate,\n expire: INFINITE_CACHE,\n stale: INFINITE_CACHE,\n tags: [...implicitTags],\n prerenderResumeDataCache: null,\n })\n\n let prospectiveResult\n try {\n prospectiveResult = this.workUnitAsyncStorage.run(\n prospectiveRoutePrerenderStore,\n handler,\n request,\n handlerContext\n )\n } catch (err) {\n if (prospectiveController.signal.aborted) {\n // the route handler called an API which is always dynamic\n // there is no need to try again\n prospectiveRenderIsDynamic = true\n } else if (\n process.env.NEXT_DEBUG_BUILD ||\n process.env.__NEXT_VERBOSE_LOGGING\n ) {\n printDebugThrownValueForProspectiveRender(err, workStore.route)\n }\n }\n if (\n typeof prospectiveResult === 'object' &&\n prospectiveResult !== null &&\n typeof (prospectiveResult as any).then === 'function'\n ) {\n // The handler returned a Thenable. We'll listen for rejections to determine\n // if the route is erroring for dynamic reasons.\n ;(prospectiveResult as any as Promise<unknown>).then(\n () => {},\n (err) => {\n if (prospectiveController.signal.aborted) {\n // the route handler called an API which is always dynamic\n // there is no need to try again\n prospectiveRenderIsDynamic = true\n } else if (process.env.NEXT_DEBUG_BUILD) {\n printDebugThrownValueForProspectiveRender(\n err,\n workStore.route\n )\n }\n }\n )\n }\n await cacheSignal.cacheReady()\n\n if (prospectiveRenderIsDynamic) {\n // the route handler called an API which is always dynamic\n // there is no need to try again\n const dynamicReason = getFirstDynamicReason(dynamicTracking)\n if (dynamicReason) {\n throw new DynamicServerError(\n `Route ${workStore.route} couldn't be rendered statically because it used \\`${dynamicReason}\\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n } else {\n console.error(\n 'Expected Next.js to keep track of reason for opting out of static rendering but one was not found. This is a bug in Next.js'\n )\n throw new DynamicServerError(\n `Route ${workStore.route} couldn't be rendered statically because it used a dynamic API. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n }\n }\n\n // TODO start passing this controller to the route handler. We should expose\n // it so the handler to abort inflight requests and other operations if we abort\n // the prerender.\n const finalController = new AbortController()\n dynamicTracking = createDynamicTrackingState(undefined)\n\n const finalRoutePrerenderStore: PrerenderStore = (prerenderStore = {\n type: 'prerender',\n phase: 'action',\n implicitTags: implicitTags,\n renderSignal: finalController.signal,\n controller: finalController,\n cacheSignal: null,\n dynamicTracking,\n revalidate: defaultRevalidate,\n expire: INFINITE_CACHE,\n stale: INFINITE_CACHE,\n tags: [...implicitTags],\n prerenderResumeDataCache: null,\n })\n\n let responseHandled = false\n res = await new Promise((resolve, reject) => {\n scheduleImmediate(async () => {\n try {\n const result = await (this.workUnitAsyncStorage.run(\n finalRoutePrerenderStore,\n handler,\n request,\n handlerContext\n ) as Promise<Response>)\n if (responseHandled) {\n // we already rejected in the followup task\n return\n } else if (!(result instanceof Response)) {\n // This is going to error but we let that happen below\n resolve(result)\n return\n }\n\n responseHandled = true\n\n let bodyHandled = false\n result.arrayBuffer().then((body) => {\n if (!bodyHandled) {\n bodyHandled = true\n\n resolve(\n new Response(body, {\n headers: result.headers,\n status: result.status,\n statusText: result.statusText,\n })\n )\n }\n }, reject)\n scheduleImmediate(() => {\n if (!bodyHandled) {\n bodyHandled = true\n finalController.abort()\n reject(createDynamicIOError(workStore.route))\n }\n })\n } catch (err) {\n reject(err)\n }\n })\n scheduleImmediate(() => {\n if (!responseHandled) {\n responseHandled = true\n finalController.abort()\n reject(createDynamicIOError(workStore.route))\n }\n })\n })\n if (finalController.signal.aborted) {\n // We aborted from within the execution\n throw createDynamicIOError(workStore.route)\n } else {\n // We didn't abort during the execution. We can abort now as a matter of semantics\n // though at the moment nothing actually consumes this signal so it won't halt any\n // inflight work.\n finalController.abort()\n }\n } else {\n prerenderStore = {\n type: 'prerender-legacy',\n phase: 'action',\n implicitTags: implicitTags,\n revalidate: defaultRevalidate,\n expire: INFINITE_CACHE,\n stale: INFINITE_CACHE,\n tags: [...implicitTags],\n }\n\n res = await workUnitAsyncStorage.run(\n prerenderStore,\n handler,\n request,\n handlerContext\n )\n }\n } else {\n res = await workUnitAsyncStorage.run(\n requestStore,\n handler,\n request,\n handlerContext\n )\n }\n } catch (err) {\n if (isRedirectError(err)) {\n const url = getURLFromRedirectError(err)\n if (!url) {\n throw new Error('Invariant: Unexpected redirect url format')\n }\n\n // We need to capture any headers that should be sent on\n // the response.\n const headers = new Headers({ Location: url })\n\n // Let's append any cookies that were added by the\n // cookie API.\n // TODO leaving the gate here b/c it indicates that we might not actually want to do this\n // on every `do` call. During prerender there should be no mutableCookies because\n if (requestStore.type === 'request') {\n appendMutableCookies(headers, requestStore.mutableCookies)\n }\n\n // Return the redirect response.\n return new Response(null, {\n // If we're in an action, we want to use a 303 redirect as we don't\n // want the POST request to follow the redirect, as it could result in\n // erroneous re-submissions.\n status: actionStore.isAction\n ? RedirectStatusCode.SeeOther\n : getRedirectStatusCodeFromError(err),\n headers,\n })\n } else if (isHTTPAccessFallbackError(err)) {\n const httpStatus = getAccessFallbackHTTPStatus(err)\n return new Response(null, { status: httpStatus })\n }\n\n throw err\n }\n\n // Validate that the response is a valid response object.\n if (!(res instanceof Response)) {\n throw new Error(\n `No response is returned from route handler '${this.resolvedPagePath}'. Ensure you return a \\`Response\\` or a \\`NextResponse\\` in all branches of your handler.`\n )\n }\n\n context.renderOpts.fetchMetrics = workStore.fetchMetrics\n\n context.renderOpts.pendingWaitUntil = Promise.all([\n workStore.incrementalCache?.revalidateTag(\n workStore.revalidatedTags || []\n ),\n ...Object.values(workStore.pendingRevalidates || {}),\n ]).finally(() => {\n if (process.env.NEXT_PRIVATE_DEBUG_CACHE) {\n console.log(\n 'pending revalidates promise finished for:',\n requestStore.url\n )\n }\n })\n\n if (prerenderStore) {\n context.renderOpts.collectedTags = prerenderStore.tags?.join(',')\n context.renderOpts.collectedRevalidate = prerenderStore.revalidate\n context.renderOpts.collectedExpire = prerenderStore.expire\n context.renderOpts.collectedStale = prerenderStore.stale\n }\n\n // It's possible cookies were set in the handler, so we need\n // to merge the modified cookies and the returned response\n // here.\n const headers = new Headers(res.headers)\n if (\n requestStore.type === 'request' &&\n appendMutableCookies(headers, requestStore.mutableCookies)\n ) {\n return new Response(res.body, {\n status: res.status,\n statusText: res.statusText,\n headers,\n })\n }\n\n return res\n }\n\n public async handle(\n req: NextRequest,\n context: AppRouteRouteHandlerContext\n ): Promise<Response> {\n // Get the handler function for the given method.\n const handler = this.resolve(req.method)\n\n // Get the context for the static generation.\n const staticGenerationContext: WorkStoreContext = {\n // App Routes don't support unknown route params.\n fallbackRouteParams: null,\n page: this.definition.page,\n renderOpts: context.renderOpts,\n buildId: context.sharedContext.buildId,\n }\n\n // Add the fetchCache option to the renderOpts.\n staticGenerationContext.renderOpts.fetchCache = this.userland.fetchCache\n\n const actionStore: ActionStore = {\n isAppRoute: true,\n isAction: getIsServerAction(req),\n }\n\n const implicitTags = getImplicitTags(\n this.definition.page,\n req.nextUrl,\n // App Routes don't support unknown route params.\n null\n )\n\n const requestStore = createRequestStoreForAPI(\n req,\n req.nextUrl,\n implicitTags,\n undefined,\n context.prerenderManifest.preview\n )\n\n const workStore = createWorkStore(staticGenerationContext)\n\n // Run the handler with the request AsyncLocalStorage to inject the helper\n // support. We set this to `unknown` because the type is not known until\n // runtime when we do a instanceof check below.\n const response: unknown = await this.actionAsyncStorage.run(\n actionStore,\n () =>\n this.workUnitAsyncStorage.run(requestStore, () =>\n this.workAsyncStorage.run(workStore, async () => {\n // Check to see if we should bail out of static generation based on\n // having non-static methods.\n if (this.hasNonStaticMethods) {\n if (workStore.isStaticGeneration) {\n const err = new DynamicServerError(\n 'Route is configured with methods that cannot be statically generated.'\n )\n workStore.dynamicUsageDescription = err.message\n workStore.dynamicUsageStack = err.stack\n throw err\n }\n }\n\n // We assume we can pass the original request through however we may end up\n // proxying it in certain circumstances based on execution type and configuration\n let request = req\n\n // Update the static generation store based on the dynamic property.\n switch (this.dynamic) {\n case 'force-dynamic': {\n // Routes of generated paths should be dynamic\n workStore.forceDynamic = true\n break\n }\n case 'force-static':\n // The dynamic property is set to force-static, so we should\n // force the page to be static.\n workStore.forceStatic = true\n // We also Proxy the request to replace dynamic data on the request\n // with empty stubs to allow for safely executing as static\n request = new Proxy(req, forceStaticRequestHandlers)\n break\n case 'error':\n // The dynamic property is set to error, so we should throw an\n // error if the page is being statically generated.\n workStore.dynamicShouldError = true\n if (workStore.isStaticGeneration)\n request = new Proxy(req, requireStaticRequestHandlers)\n break\n default:\n // We proxy `NextRequest` to track dynamic access, and potentially bail out of static generation\n request = proxyNextRequest(req, workStore)\n }\n\n // TODO: propagate this pathname from route matcher\n const route = getPathnameFromAbsolutePath(this.resolvedPagePath)\n\n const tracer = getTracer()\n\n // Update the root span attribute for the route.\n tracer.setRootSpanAttribute('next.route', route)\n\n return tracer.trace(\n AppRouteRouteHandlersSpan.runHandler,\n {\n spanName: `executing api route (app) ${route}`,\n attributes: {\n 'next.route': route,\n },\n },\n async () =>\n this.do(\n handler,\n actionStore,\n workStore,\n requestStore,\n implicitTags,\n request,\n context\n )\n )\n })\n )\n )\n\n // If the handler did't return a valid response, then return the internal\n // error response.\n if (!(response instanceof Response)) {\n // TODO: validate the correct handling behavior, maybe log something?\n return new Response(null, { status: 500 })\n }\n\n if (response.headers.has('x-middleware-rewrite')) {\n throw new Error(\n 'NextResponse.rewrite() was used in a app route handler, this is not currently supported. Please remove the invocation to continue.'\n )\n }\n\n if (response.headers.get('x-middleware-next') === '1') {\n // TODO: move this error into the `NextResponse.next()` function.\n throw new Error(\n 'NextResponse.next() was used in a app route handler, this is not supported. See here for more info: https://nextjs.org/docs/messages/next-response-next-in-app-route-handler'\n )\n }\n\n return response\n }\n}\n\nexport default AppRouteRouteModule\n\n/**\n * Gets all the method names for handlers that are not considered static.\n *\n * @param handlers the handlers from the userland module\n * @returns the method names that are not considered static or false if all\n * methods are static\n */\nexport function hasNonStaticMethods(handlers: AppRouteHandlers): boolean {\n if (\n // Order these by how common they are to be used\n handlers.POST ||\n handlers.PUT ||\n handlers.DELETE ||\n handlers.PATCH ||\n handlers.OPTIONS\n ) {\n return true\n }\n return false\n}\n\n// These symbols will be used to stash cached values on Proxied requests without requiring\n// additional closures or storage such as WeakMaps.\nconst nextURLSymbol = Symbol('nextUrl')\nconst requestCloneSymbol = Symbol('clone')\nconst urlCloneSymbol = Symbol('clone')\nconst searchParamsSymbol = Symbol('searchParams')\nconst hrefSymbol = Symbol('href')\nconst toStringSymbol = Symbol('toString')\nconst headersSymbol = Symbol('headers')\nconst cookiesSymbol = Symbol('cookies')\n\ntype RequestSymbolTarget = {\n [headersSymbol]?: Headers\n [cookiesSymbol]?: RequestCookies | ReadonlyRequestCookies\n [nextURLSymbol]?: NextURL\n [requestCloneSymbol]?: () => NextRequest\n}\n\ntype UrlSymbolTarget = {\n [searchParamsSymbol]?: URLSearchParams\n [hrefSymbol]?: string\n [toStringSymbol]?: () => string\n [urlCloneSymbol]?: () => NextURL\n}\n\n/**\n * The general technique with these proxy handlers is to prioritize keeping them static\n * by stashing computed values on the Proxy itself. This is safe because the Proxy is\n * inaccessible to the consumer since all operations are forwarded\n */\nconst forceStaticRequestHandlers = {\n get(\n target: NextRequest & RequestSymbolTarget,\n prop: string | symbol,\n receiver: any\n ): unknown {\n switch (prop) {\n case 'headers':\n return (\n target[headersSymbol] ||\n (target[headersSymbol] = HeadersAdapter.seal(new Headers({})))\n )\n case 'cookies':\n return (\n target[cookiesSymbol] ||\n (target[cookiesSymbol] = RequestCookiesAdapter.seal(\n new RequestCookies(new Headers({}))\n ))\n )\n case 'nextUrl':\n return (\n target[nextURLSymbol] ||\n (target[nextURLSymbol] = new Proxy(\n target.nextUrl,\n forceStaticNextUrlHandlers\n ))\n )\n case 'url':\n // we don't need to separately cache this we can just read the nextUrl\n // and return the href since we know it will have been stripped of any\n // dynamic parts. We access via the receiver to trigger the get trap\n return receiver.nextUrl.href\n case 'geo':\n case 'ip':\n return undefined\n case 'clone':\n return (\n target[requestCloneSymbol] ||\n (target[requestCloneSymbol] = () =>\n new Proxy(\n // This is vaguely unsafe but it's required since NextRequest does not implement\n // clone. The reason we might expect this to work in this context is the Proxy will\n // respond with static-amenable values anyway somewhat restoring the interface.\n // @TODO we need to rethink NextRequest and NextURL because they are not sufficientlly\n // sophisticated to adequately represent themselves in all contexts. A better approach is\n // to probably embed the static generation logic into the class itself removing the need\n // for any kind of proxying\n target.clone() as NextRequest,\n forceStaticRequestHandlers\n ))\n )\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n // We don't need to proxy set because all the properties we proxy are ready only\n // and will be ignored\n}\n\nconst forceStaticNextUrlHandlers = {\n get(\n target: NextURL & UrlSymbolTarget,\n prop: string | symbol,\n receiver: any\n ): unknown {\n switch (prop) {\n // URL properties\n case 'search':\n return ''\n case 'searchParams':\n return (\n target[searchParamsSymbol] ||\n (target[searchParamsSymbol] = new URLSearchParams())\n )\n case 'href':\n return (\n target[hrefSymbol] ||\n (target[hrefSymbol] = cleanURL(target.href).href)\n )\n case 'toJSON':\n case 'toString':\n return (\n target[toStringSymbol] ||\n (target[toStringSymbol] = () => receiver.href)\n )\n\n // NextUrl properties\n case 'url':\n // Currently nextURL does not expose url but our Docs indicate that it is an available property\n // I am forcing this to undefined here to avoid accidentally exposing a dynamic value later if\n // the underlying nextURL ends up adding this property\n return undefined\n case 'clone':\n return (\n target[urlCloneSymbol] ||\n (target[urlCloneSymbol] = () =>\n new Proxy(target.clone(), forceStaticNextUrlHandlers))\n )\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n}\n\nfunction proxyNextRequest(request: NextRequest, workStore: WorkStore) {\n const nextUrlHandlers = {\n get(\n target: NextURL & UrlSymbolTarget,\n prop: string | symbol,\n receiver: any\n ): unknown {\n switch (prop) {\n case 'search':\n case 'searchParams':\n case 'url':\n case 'href':\n case 'toJSON':\n case 'toString':\n case 'origin': {\n const workUnitStore = workUnitAsyncStorage.getStore()\n trackDynamic(workStore, workUnitStore, `nextUrl.${prop}`)\n return ReflectAdapter.get(target, prop, receiver)\n }\n case 'clone':\n return (\n target[urlCloneSymbol] ||\n (target[urlCloneSymbol] = () =>\n new Proxy(target.clone(), nextUrlHandlers))\n )\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n }\n\n const nextRequestHandlers = {\n get(\n target: NextRequest & RequestSymbolTarget,\n prop: string | symbol\n ): unknown {\n switch (prop) {\n case 'nextUrl':\n return (\n target[nextURLSymbol] ||\n (target[nextURLSymbol] = new Proxy(target.nextUrl, nextUrlHandlers))\n )\n case 'headers':\n case 'cookies':\n case 'url':\n case 'body':\n case 'blob':\n case 'json':\n case 'text':\n case 'arrayBuffer':\n case 'formData': {\n const workUnitStore = workUnitAsyncStorage.getStore()\n trackDynamic(workStore, workUnitStore, `request.${prop}`)\n // The receiver arg is intentionally the same as the target to fix an issue with\n // edge runtime, where attempting to access internal slots with the wrong `this` context\n // results in an error.\n return ReflectAdapter.get(target, prop, target)\n }\n case 'clone':\n return (\n target[requestCloneSymbol] ||\n (target[requestCloneSymbol] = () =>\n new Proxy(\n // This is vaguely unsafe but it's required since NextRequest does not implement\n // clone. The reason we might expect this to work in this context is the Proxy will\n // respond with static-amenable values anyway somewhat restoring the interface.\n // @TODO we need to rethink NextRequest and NextURL because they are not sufficientlly\n // sophisticated to adequately represent themselves in all contexts. A better approach is\n // to probably embed the static generation logic into the class itself removing the need\n // for any kind of proxying\n target.clone() as NextRequest,\n nextRequestHandlers\n ))\n )\n default:\n // The receiver arg is intentionally the same as the target to fix an issue with\n // edge runtime, where attempting to access internal slots with the wrong `this` context\n // results in an error.\n return ReflectAdapter.get(target, prop, target)\n }\n },\n // We don't need to proxy set because all the properties we proxy are ready only\n // and will be ignored\n }\n\n return new Proxy(request, nextRequestHandlers)\n}\n\nconst requireStaticRequestHandlers = {\n get(\n target: NextRequest & RequestSymbolTarget,\n prop: string | symbol,\n receiver: any\n ): unknown {\n switch (prop) {\n case 'nextUrl':\n return (\n target[nextURLSymbol] ||\n (target[nextURLSymbol] = new Proxy(\n target.nextUrl,\n requireStaticNextUrlHandlers\n ))\n )\n case 'headers':\n case 'cookies':\n case 'url':\n case 'body':\n case 'blob':\n case 'json':\n case 'text':\n case 'arrayBuffer':\n case 'formData':\n throw new StaticGenBailoutError(\n `Route ${target.nextUrl.pathname} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`request.${prop}\\`.`\n )\n case 'clone':\n return (\n target[requestCloneSymbol] ||\n (target[requestCloneSymbol] = () =>\n new Proxy(\n // This is vaguely unsafe but it's required since NextRequest does not implement\n // clone. The reason we might expect this to work in this context is the Proxy will\n // respond with static-amenable values anyway somewhat restoring the interface.\n // @TODO we need to rethink NextRequest and NextURL because they are not sufficientlly\n // sophisticated to adequately represent themselves in all contexts. A better approach is\n // to probably embed the static generation logic into the class itself removing the need\n // for any kind of proxying\n target.clone() as NextRequest,\n requireStaticRequestHandlers\n ))\n )\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n // We don't need to proxy set because all the properties we proxy are ready only\n // and will be ignored\n}\n\nconst requireStaticNextUrlHandlers = {\n get(\n target: NextURL & UrlSymbolTarget,\n prop: string | symbol,\n receiver: any\n ): unknown {\n switch (prop) {\n case 'search':\n case 'searchParams':\n case 'url':\n case 'href':\n case 'toJSON':\n case 'toString':\n case 'origin':\n throw new StaticGenBailoutError(\n `Route ${target.pathname} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`nextUrl.${prop}\\`.`\n )\n case 'clone':\n return (\n target[urlCloneSymbol] ||\n (target[urlCloneSymbol] = () =>\n new Proxy(target.clone(), requireStaticNextUrlHandlers))\n )\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n}\n\nfunction createDynamicIOError(route: string) {\n return new DynamicServerError(\n `Route ${route} couldn't be rendered statically because it used IO that was not cached. See more info here: https://nextjs.org/docs/messages/dynamic-io`\n )\n}\n\nexport function trackDynamic(\n store: WorkStore,\n workUnitStore: undefined | WorkUnitStore,\n expression: string\n): void {\n if (workUnitStore) {\n if (workUnitStore.type === 'cache') {\n throw new Error(\n `Route ${store.route} used \"${expression}\" inside \"use cache\". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \"${expression}\" outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`\n )\n } else if (workUnitStore.type === 'unstable-cache') {\n throw new Error(\n `Route ${store.route} used \"${expression}\" inside a function cached with \"unstable_cache(...)\". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \"${expression}\" outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`\n )\n }\n }\n\n if (store.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${store.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n if (workUnitStore.type === 'prerender') {\n // dynamicIO Prerender\n const error = new Error(\n `Route ${store.route} used ${expression} without first calling \\`await connection()\\`. See more info here: https://nextjs.org/docs/messages/next-prerender-sync-request`\n )\n abortAndThrowOnSynchronousRequestDataAccess(\n store.route,\n expression,\n error,\n workUnitStore\n )\n } else if (workUnitStore.type === 'prerender-ppr') {\n // PPR Prerender\n postponeWithTracking(\n store.route,\n expression,\n workUnitStore.dynamicTracking\n )\n } else if (workUnitStore.type === 'prerender-legacy') {\n // legacy Prerender\n workUnitStore.revalidate = 0\n\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n } else if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore &&\n workUnitStore.type === 'request'\n ) {\n workUnitStore.usedDynamic = true\n }\n }\n}\n","import type { AppRouteModule } from '../module.compiled'\n\n// route handlers are only statically optimized if they define\n// one of these top-level configs manually\n// - dynamic = 'force-static'\n// - dynamic = 'error'\n// - revalidate > 0\n// - revalidate = false\n// - generateStaticParams\nexport function isStaticGenEnabled(\n mod: AppRouteModule['routeModule']['userland']\n) {\n return (\n mod.dynamic === 'force-static' ||\n mod.dynamic === 'error' ||\n mod.revalidate === false ||\n (mod.revalidate !== undefined && mod.revalidate > 0) ||\n typeof mod.generateStaticParams == 'function'\n )\n}\n","/**\n * Based on https://github.com/facebook/react/blob/d4e78c42a94be027b4dc7ed2659a5fddfbf9bd4e/packages/react/src/ReactFetch.js\n */\nimport * as React from 'react'\nimport { cloneResponse } from './clone-response'\nimport { InvariantError } from '../../shared/lib/invariant-error'\n\nconst simpleCacheKey = '[\"GET\",[],null,\"follow\",null,null,null,null]' // generateCacheKey(new Request('https://blank'));\n\nfunction generateCacheKey(request: Request): string {\n // We pick the fields that goes into the key used to dedupe requests.\n // We don't include the `cache` field, because we end up using whatever\n // caching resulted from the first request.\n // Notably we currently don't consider non-standard (or future) options.\n // This might not be safe. TODO: warn for non-standard extensions differing.\n // IF YOU CHANGE THIS UPDATE THE simpleCacheKey ABOVE.\n return JSON.stringify([\n request.method,\n Array.from(request.headers.entries()),\n request.mode,\n request.redirect,\n request.credentials,\n request.referrer,\n request.referrerPolicy,\n request.integrity,\n ])\n}\n\ntype CacheEntry = [\n key: string,\n promise: Promise<Response>,\n response: Response | null,\n]\n\nexport function createDedupeFetch(originalFetch: typeof fetch) {\n const getCacheEntries = React.cache(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- url is the cache key\n (url: string): CacheEntry[] => []\n )\n\n return function dedupeFetch(\n resource: URL | RequestInfo,\n options?: RequestInit\n ): Promise<Response> {\n if (options && options.signal) {\n // If we're passed a signal, then we assume that\n // someone else controls the lifetime of this object and opts out of\n // caching. It's effectively the opt-out mechanism.\n // Ideally we should be able to check this on the Request but\n // it always gets initialized with its own signal so we don't\n // know if it's supposed to override - unless we also override the\n // Request constructor.\n return originalFetch(resource, options)\n }\n // Normalize the Request\n let url: string\n let cacheKey: string\n if (typeof resource === 'string' && !options) {\n // Fast path.\n cacheKey = simpleCacheKey\n url = resource\n } else {\n // Normalize the request.\n // if resource is not a string or a URL (its an instance of Request)\n // then do not instantiate a new Request but instead\n // reuse the request as to not disturb the body in the event it's a ReadableStream.\n const request =\n typeof resource === 'string' || resource instanceof URL\n ? new Request(resource, options)\n : resource\n if (\n (request.method !== 'GET' && request.method !== 'HEAD') ||\n request.keepalive\n ) {\n // We currently don't dedupe requests that might have side-effects. Those\n // have to be explicitly cached. We assume that the request doesn't have a\n // body if it's GET or HEAD.\n // keepalive gets treated the same as if you passed a custom cache signal.\n return originalFetch(resource, options)\n }\n cacheKey = generateCacheKey(request)\n url = request.url\n }\n\n const cacheEntries = getCacheEntries(url)\n for (let i = 0, j = cacheEntries.length; i < j; i += 1) {\n const [key, promise] = cacheEntries[i]\n if (key === cacheKey) {\n return promise.then(() => {\n const response = cacheEntries[i][2]\n if (!response) throw new InvariantError('No cached response')\n\n // We're cloning the response using this utility because there exists\n // a bug in the undici library around response cloning. See the\n // following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n const [cloned1, cloned2] = cloneResponse(response)\n cacheEntries[i][2] = cloned2\n return cloned1\n })\n }\n }\n\n // We pass the original arguments here in case normalizing the Request\n // doesn't include all the options in this environment.\n const promise = originalFetch(resource, options)\n const entry: CacheEntry = [cacheKey, promise, null]\n cacheEntries.push(entry)\n\n return promise.then((response) => {\n // We're cloning the response using this utility because there exists\n // a bug in the undici library around response cloning. See the\n // following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n const [cloned1, cloned2] = cloneResponse(response)\n entry[2] = cloned2\n return cloned1\n })\n }\n}\n","import type { ParsedUrlQuery } from 'querystring'\n\n/**\n * Converts the query into params.\n *\n * @param query the query to convert to params\n * @returns the params\n */\nexport function parsedUrlQueryToParams(\n query: ParsedUrlQuery\n): Record<string, string | string[]> {\n const params: Record<string, string | string[]> = {}\n\n for (const [key, value] of Object.entries(query)) {\n if (typeof value === 'undefined') continue\n params[key] = value\n }\n\n return params\n}\n","import { actionAsyncStorage } from '../../server/app-render/action-async-storage.external'\nimport { RedirectStatusCode } from './redirect-status-code'\nimport {\n RedirectType,\n type RedirectError,\n isRedirectError,\n REDIRECT_ERROR_CODE,\n} from './redirect-error'\n\nexport function getRedirectError(\n url: string,\n type: RedirectType,\n statusCode: RedirectStatusCode = RedirectStatusCode.TemporaryRedirect\n): RedirectError {\n const error = new Error(REDIRECT_ERROR_CODE) as RedirectError\n error.digest = `${REDIRECT_ERROR_CODE};${type};${url};${statusCode};`\n return error\n}\n\n/**\n * This function allows you to redirect the user to another URL. It can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * - In a Server Component, this will insert a meta tag to redirect the user to the target page.\n * - In a Route Handler or Server Action, it will serve a 307/303 to the caller.\n * - In a Server Action, type defaults to 'push' and 'replace' elsewhere.\n *\n * Read more: [Next.js Docs: `redirect`](https://nextjs.org/docs/app/api-reference/functions/redirect)\n */\nexport function redirect(\n /** The URL to redirect to */\n url: string,\n type?: RedirectType\n): never {\n const actionStore = actionAsyncStorage.getStore()\n const redirectType =\n type || (actionStore?.isAction ? RedirectType.push : RedirectType.replace)\n throw getRedirectError(\n url,\n redirectType,\n RedirectStatusCode.TemporaryRedirect\n )\n}\n\n/**\n * This function allows you to redirect the user to another URL. It can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * - In a Server Component, this will insert a meta tag to redirect the user to the target page.\n * - In a Route Handler or Server Action, it will serve a 308/303 to the caller.\n *\n * Read more: [Next.js Docs: `redirect`](https://nextjs.org/docs/app/api-reference/functions/redirect)\n */\nexport function permanentRedirect(\n /** The URL to redirect to */\n url: string,\n type: RedirectType = RedirectType.replace\n): never {\n throw getRedirectError(url, type, RedirectStatusCode.PermanentRedirect)\n}\n\n/**\n * Returns the encoded URL from the error if it's a RedirectError, null\n * otherwise. Note that this does not validate the URL returned.\n *\n * @param error the error that may be a redirect error\n * @return the url if the error was a redirect error\n */\nexport function getURLFromRedirectError(error: RedirectError): string\nexport function getURLFromRedirectError(error: unknown): string | null {\n if (!isRedirectError(error)) return null\n\n // Slices off the beginning of the digest that contains the code and the\n // separating ';'.\n return error.digest.split(';').slice(2, -2).join(';')\n}\n\nexport function getRedirectTypeFromError(error: RedirectError): RedirectType {\n if (!isRedirectError(error)) {\n throw new Error('Not a redirect error')\n }\n\n return error.digest.split(';', 2)[1] as RedirectType\n}\n\nexport function getRedirectStatusCodeFromError(error: RedirectError): number {\n if (!isRedirectError(error)) {\n throw new Error('Not a redirect error')\n }\n\n return Number(error.digest.split(';').at(-2))\n}\n","import type { IncomingMessage } from 'http'\nimport type { BaseNextRequest } from '../base-http'\nimport type { NextRequest } from '../web/exports'\nimport { ACTION_HEADER } from '../../client/components/app-router-headers'\n\nexport function getServerActionRequestMetadata(\n req: IncomingMessage | BaseNextRequest | NextRequest\n): {\n actionId: string | null\n isURLEncodedAction: boolean\n isMultipartAction: boolean\n isFetchAction: boolean\n isServerAction: boolean\n} {\n let actionId: string | null\n let contentType: string | null\n\n if (req.headers instanceof Headers) {\n actionId = req.headers.get(ACTION_HEADER.toLowerCase()) ?? null\n contentType = req.headers.get('content-type')\n } else {\n actionId = (req.headers[ACTION_HEADER.toLowerCase()] as string) ?? null\n contentType = req.headers['content-type'] ?? null\n }\n\n const isURLEncodedAction = Boolean(\n req.method === 'POST' && contentType === 'application/x-www-form-urlencoded'\n )\n const isMultipartAction = Boolean(\n req.method === 'POST' && contentType?.startsWith('multipart/form-data')\n )\n const isFetchAction = Boolean(\n actionId !== undefined &&\n typeof actionId === 'string' &&\n req.method === 'POST'\n )\n\n const isServerAction = Boolean(\n isFetchAction || isURLEncodedAction || isMultipartAction\n )\n\n return {\n actionId,\n isURLEncodedAction,\n isMultipartAction,\n isFetchAction,\n isServerAction,\n }\n}\n\nexport function getIsServerAction(\n req: IncomingMessage | BaseNextRequest | NextRequest\n): boolean {\n return getServerActionRequestMetadata(req).isServerAction\n}\n","import type { WorkStore } from '../app-render/work-async-storage.external'\nimport type { IncrementalCache } from '../lib/incremental-cache'\nimport type { RenderOpts } from '../app-render/types'\nimport type { FetchMetric } from '../base-http'\nimport type { RequestLifecycleOpts } from '../base-server'\nimport type { FallbackRouteParams } from '../request/fallback-params'\nimport type { AppSegmentConfig } from '../../build/segment-config/app/app-segment-config'\nimport type { CacheLife } from '../use-cache/cache-life'\n\nimport { AfterContext } from '../after/after-context'\n\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\n\nexport type WorkStoreContext = {\n /**\n * The page that is being rendered. This relates to the path to the page file.\n */\n page: string\n\n /**\n * The route parameters that are currently unknown.\n */\n fallbackRouteParams: FallbackRouteParams | null\n\n requestEndedState?: { ended?: boolean }\n isPrefetchRequest?: boolean\n renderOpts: {\n cacheLifeProfiles?: { [profile: string]: CacheLife }\n incrementalCache?: IncrementalCache\n isOnDemandRevalidate?: boolean\n fetchCache?: AppSegmentConfig['fetchCache']\n isServerAction?: boolean\n pendingWaitUntil?: Promise<any>\n experimental: Pick<\n RenderOpts['experimental'],\n 'isRoutePPREnabled' | 'dynamicIO' | 'authInterrupts'\n >\n\n /**\n * Fetch metrics attached in patch-fetch.ts\n **/\n fetchMetrics?: FetchMetric[]\n\n /**\n * A hack around accessing the store value outside the context of the\n * request.\n *\n * @internal\n * @deprecated should only be used as a temporary workaround\n */\n // TODO: remove this when we resolve accessing the store outside the execution context\n store?: WorkStore\n } & Pick<\n // Pull some properties from RenderOpts so that the docs are also\n // mirrored.\n RenderOpts,\n | 'assetPrefix'\n | 'supportsDynamicResponse'\n | 'isRevalidate'\n | 'nextExport'\n | 'isDraftMode'\n | 'isDebugDynamicAccesses'\n > &\n RequestLifecycleOpts &\n Partial<Pick<RenderOpts, 'reactLoadableManifest'>>\n\n /**\n * The build ID of the current build.\n */\n buildId: string\n}\n\nexport function createWorkStore({\n page,\n fallbackRouteParams,\n renderOpts,\n requestEndedState,\n isPrefetchRequest,\n buildId,\n}: WorkStoreContext): WorkStore {\n /**\n * Rules of Static & Dynamic HTML:\n *\n * 1.) We must generate static HTML unless the caller explicitly opts\n * in to dynamic HTML support.\n *\n * 2.) If dynamic HTML support is requested, we must honor that request\n * or throw an error. It is the sole responsibility of the caller to\n * ensure they aren't e.g. requesting dynamic HTML for an AMP page.\n *\n * 3.) If the request is in draft mode, we must generate dynamic HTML.\n *\n * 4.) If the request is a server action, we must generate dynamic HTML.\n *\n * These rules help ensure that other existing features like request caching,\n * coalescing, and ISR continue working as intended.\n */\n const isStaticGeneration =\n !renderOpts.supportsDynamicResponse &&\n !renderOpts.isDraftMode &&\n !renderOpts.isServerAction\n\n const store: WorkStore = {\n isStaticGeneration,\n page,\n fallbackRouteParams,\n route: normalizeAppPath(page),\n incrementalCache:\n // we fallback to a global incremental cache for edge-runtime locally\n // so that it can access the fs cache without mocks\n renderOpts.incrementalCache || (globalThis as any).__incrementalCache,\n cacheLifeProfiles: renderOpts.cacheLifeProfiles,\n isRevalidate: renderOpts.isRevalidate,\n isPrerendering: renderOpts.nextExport,\n fetchCache: renderOpts.fetchCache,\n isOnDemandRevalidate: renderOpts.isOnDemandRevalidate,\n\n isDraftMode: renderOpts.isDraftMode,\n\n rootParams: {},\n\n requestEndedState,\n isPrefetchRequest,\n buildId,\n reactLoadableManifest: renderOpts?.reactLoadableManifest || {},\n assetPrefix: renderOpts?.assetPrefix || '',\n\n afterContext: createAfterContext(renderOpts),\n }\n\n // TODO: remove this when we resolve accessing the store outside the execution context\n renderOpts.store = store\n\n return store\n}\n\nfunction createAfterContext(renderOpts: RequestLifecycleOpts): AfterContext {\n const { waitUntil, onClose, onAfterTaskError } = renderOpts\n return new AfterContext({\n waitUntil,\n onClose,\n onTaskError: onAfterTaskError,\n })\n}\n","/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */\nexport function ensureLeadingSlash(path: string) {\n return path.startsWith('/') ? path : `/${path}`\n}\n","import { ensureLeadingSlash } from '../../page-path/ensure-leading-slash'\nimport { isGroupSegment } from '../../segment'\n\n/**\n * Normalizes an app route so it represents the actual request path. Essentially\n * performing the following transformations:\n *\n * - `/(dashboard)/user/[id]/page` to `/user/[id]`\n * - `/(dashboard)/account/page` to `/account`\n * - `/user/[id]/page` to `/user/[id]`\n * - `/account/page` to `/account`\n * - `/page` to `/`\n * - `/(dashboard)/user/[id]/route` to `/user/[id]`\n * - `/(dashboard)/account/route` to `/account`\n * - `/user/[id]/route` to `/user/[id]`\n * - `/account/route` to `/account`\n * - `/route` to `/`\n * - `/` to `/`\n *\n * @param route the app route to normalize\n * @returns the normalized pathname\n */\nexport function normalizeAppPath(route: string) {\n return ensureLeadingSlash(\n route.split('/').reduce((pathname, segment, index, segments) => {\n // Empty segments are ignored.\n if (!segment) {\n return pathname\n }\n\n // Groups are ignored.\n if (isGroupSegment(segment)) {\n return pathname\n }\n\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname\n }\n\n // The last segment (if it's a leaf) should be ignored.\n if (\n (segment === 'page' || segment === 'route') &&\n index === segments.length - 1\n ) {\n return pathname\n }\n\n return `${pathname}/${segment}`\n }, '')\n )\n}\n\n/**\n * Strips the `.rsc` extension if it's in the pathname.\n * Since this function is used on full urls it checks `?` for searchParams handling.\n */\nexport function normalizeRscURL(url: string) {\n return url.replace(\n /\\.rsc($|\\?)/,\n // $1 ensures `?` is preserved\n '$1'\n )\n}\n","/**\n * Get pathname from absolute path.\n *\n * @param absolutePath the absolute path\n * @returns the pathname\n */\nexport function getPathnameFromAbsolutePath(absolutePath: string) {\n // Remove prefix including app dir\n let appDir = '/app/'\n if (!absolutePath.includes(appDir)) {\n appDir = '\\\\app\\\\'\n }\n const [, ...parts] = absolutePath.split(appDir)\n const relativePath = appDir[0] + parts.join(appDir)\n\n // remove extension\n const pathname = relativePath.split('.').slice(0, -1).join('.')\n return pathname\n}\n","/**\n * Cleans a URL by stripping the protocol, host, and search params.\n *\n * @param urlString the url to clean\n * @returns the cleaned url\n */\n\nexport function cleanURL(url: string | URL): URL {\n const u = new URL(url)\n u.host = 'localhost:3000'\n u.search = ''\n u.protocol = 'http'\n return u\n}\n"],"names":["__defProp","Object","__getOwnPropDesc","__getOwnPropNames","__hasOwnProp","src_exports","stringifyCookie","c","_a","attrs","Date","Boolean","stringified","encodeURIComponent","parseCookie","cookie","map","Map","pair","splitAt","key","value","decodeURIComponent","parseSetCookie","setCookie","string","name","attributes","domain","expires","httponly","maxage","path","samesite","secure","partitioned","priority","value2","compact","t","newT","Number","SAME_SITE","PRIORITY","__export","target","all","RequestCookies","ResponseCookies","module","to","from","except","desc","requestHeaders","header","Symbol","args","Array","_","n","names","result","JSON","v","responseHeaders","_b","_c","cookieString","splitCookiesString","cookiesString","start","ch","lastComma","nextStart","cookiesSeparatorFound","cookiesStrings","pos","skipWhitespace","parsed","normalizeCookie","replace","bag","headers","serialized","options","e","i","a","__nccwpck_require__","__dirname","r","TypeError","o","s","p","f","u","undefined","tryDecode","isNaN","isFinite","Math","Events","EE","addListener","clearEvent","EventEmitter","h","l","arguments","Promise","TimeoutError","Error","pTimeout","Infinity","setTimeout","clearTimeout","empty","clearInterval","setInterval","run","getIteratorFn","maybeIterable","MAYBE_ITERATOR_SYMBOL","warnNoop","publicInstance","callerName","warningKey","didWarnStateUpdateForUnmountedComponent","console","Component","props","context","updater","emptyObject","ReactNoopUpdateQueue","ComponentDummy","PureComponent","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getComponentNameFromType","type","REACT_CLIENT_REFERENCE$2","REACT_FRAGMENT_TYPE","REACT_PORTAL_TYPE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","x","isValidElementType","REACT_OFFSCREEN_TYPE","REACT_CLIENT_REFERENCE$1","disabledLog","describeBuiltInComponentFrame","prefix","match","suffix","describeNativeComponentFrame","fn","construct","reentry","frame","componentFrameCache","previousDispatcher","ReactSharedInternals","disableLogs","disabledDepth","prevLog","prevInfo","prevWarn","prevError","prevGroup","prevGroupCollapsed","prevGroupEnd","RunInRootFrame","Fake","Reflect","control","x$0","x$1","sample","namePropDescriptor","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","controlLines","_frame","reenableLogs","assign","getOwner","dispatcher","hasValidKey","config","hasOwnProperty","getter","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","self","source","owner","REACT_ELEMENT_TYPE","validateChildKeys","node","parentType","REACT_CLIENT_REFERENCE","isArrayImpl","child","isValidElement","validateExplicitKey","object","element","ownerHasKeyUseWarning","info","childOwner","prevGetCurrentStack","stack","describeUnknownElementTypeFrameInDEV","prototype","getElementKey","index","escaperLookup","noop$1","mapChildren","children","func","count","mapIntoArray","array","escapedPrefix","nameSoFar","callback","invokeCallback","oldElement","newKey","childKey","userProvidedKeyEscapeRegex","didWarnAboutMaps","resolveThenable","thenable","fulfilledValue","error","String","lazyInitializer","payload","ctor","moduleObject","resolveDispatcher","noop","enqueueTask","task","enqueueTaskImpl","requireString","_err","didWarnAboutMessageChannel","MessageChannel","channel","aggregateErrors","errors","AggregateError","popActScope","prevActQueue","prevActScopeDepth","actScopeDepth","recursivelyFlushAsyncActWork","returnValue","resolve","reject","queue","flushActQueue","isFlushing","continuation","__REACT_DEVTOOLS_GLOBAL_HOOK__","partialState","fnName","deprecatedAPIs","defineDeprecationWarning","methodName","specialPropKeyWarningShown","didWarnAboutOldJSXRuntime","WeakMap","reportGlobalError","reportError","process","didWarnNoAwaitAct","queueSeveralMicrotasks","queueMicrotask","size","exports","forEachFunc","forEachContext","didAwaitActCall","error$2","_thrownError","returnValue$jscomp$0","propName","defaultValue","typeString","childrenLength","childArray","_i","defineKeyPropWarningGetter","displayName","warnAboutAccessingKey","refObject","render","ownName","elementType","compare","scope","prevTransition","currentTransition","Set","onStartTransitionFinish","usable","action","initialState","permalink","deps","Context","formatterFn","initialValue","create","ref","passthrough","reducer","initialArg","init","subscribe","getSnapshot","getServerSnapshot","globalThis","RouteModule","constructor","userland","definition","ACTION_HEADER","FLIGHT_HEADERS","ReflectAdapter","get","prop","receiver","bind","set","has","deleteProperty","ReadonlyHeadersError","callable","HeadersAdapter","Headers","Proxy","lowercased","toLowerCase","original","keys","find","seal","merge","isArray","join","append","existing","push","delete","forEach","callbackfn","thisArg","entries","call","values","iterator","ReadonlyRequestCookiesError","RequestCookiesAdapter","cookies","SYMBOL_MODIFY_COOKIE_VALUES","for","appendMutableCookies","mutableCookies","modifiedCookieValues","getModifiedCookieValues","modified","length","resCookies","returnedCookies","getAll","MutableRequestCookiesAdapter","wrap","onUpdateCookies","responseCookies","modifiedValues","modifiedCookies","updateResponseCookies","workStore","workAsyncStorage","pathWasRevalidated","allCookies","filter","serializedCookies","tempCookies","toString","wrappedCookies","add","ensureCookiesAreStillMutable","callingExpression","requestStore","getExpectedRequestStore","phase","NEXT_CACHE_IMPLICIT_TAG_ID","WEBPACK_LAYERS_NAMES","shared","reactServerComponents","serverSideRendering","actionBrowser","api","middleware","instrument","edgeAsset","appPagesBrowser","GROUP","builtinReact","serverOnly","neutralTarget","clientOnly","bundled","appPages","BaseServerSpan","LoadComponentsSpan","NextServerSpan","NextNodeServerSpan","StartServerSpan","RenderSpan","AppRenderSpan","RouterSpan","NodeSpan","AppRouteRouteHandlersSpan","ResolveMetadataSpan","MiddlewareSpan","COOKIE_NAME_PRERENDER_BYPASS","DraftModeProvider","previewProps","req","isOnDemandRevalidate","checkIsOnDemandRevalidate","previewModeId","revalidateOnlyGenerated","cookieValue","isEnabled","_previewModeId","_mutableCookies","enable","httpOnly","sameSite","disable","mergeMiddlewareCookies","existingCookies","setCookieValue","test","charAt","substring","InvariantError","message","endsWith","withExecuteRevalidates","store","savedRevalidationState","cloneRevalidationState","newRevalidates","diffRevalidationState","prev","curr","prevTags","revalidatedTags","prevRevalidateWrites","pendingRevalidateWrites","tag","pendingRevalidates","fromEntries","promise","executeRevalidates","incrementalCache","revalidateTag","sharedAsyncLocalStorageNotAvailableError","FakeAsyncLocalStorage","getStore","exit","enterWith","maybeGlobalAsyncLocalStorage","AsyncLocalStorage","AfterContext","waitUntil","onClose","onTaskError","workUnitStores","callbackQueue","PromiseQueue","pause","after","then","errorWaitUntilNotAvailable","catch","reportTaskError","addCallback","workUnitStore","workUnitAsyncStorage","afterTaskStore","afterTaskAsyncStorage","rootTaskSpawnPhase","runCallbacksOnClosePromise","runCallbacksOnClose","wrappedCallback","runCallbacks","onIdle","taskKind","handlerError","cause","HTTP_METHODS","getDerivedTags","pathname","derivedTags","startsWith","pathnameParts","split","curPathname","slice","DYNAMIC_ERROR_CODE","DynamicServerError","description","digest","isDynamicServerError","err","StaticGenBailoutError","code","HangingPromiseRejectionError","expression","makeHangingPromise","signal","hangingPromise","addEventListener","once","ignoreReject","scheduleImmediate","cb","setImmediate","hasPostpone","React","createDynamicTrackingState","isDebugDynamicAccesses","dynamicAccesses","syncDynamicExpression","syncDynamicErrorWithStack","markCurrentScopeAsDynamic","forceDynamic","forceStatic","dynamicShouldError","route","postponeWithTracking","dynamicTracking","revalidate","dynamicUsageDescription","dynamicUsageStack","usedDynamic","throwToInterruptStaticGeneration","prerenderStore","abortAndThrowOnSynchronousRequestDataAccess","errorWithStack","validating","syncDynamicLogged","abortOnSynchronousDynamicDataAccess","createPrerenderInterruptedError","controller","abort","trackSynchronousRequestDataAccessInDev","prerenderPhase","assertPostpone","createPostponeReason","isDynamicPostponeReason","reason","includes","cloneResponse","body","body1","body2","tee","cloned1","Response","status","statusText","defineProperty","url","cloned2","RegExp","CachedRouteKind","IncrementalCacheKind","DetachedPromise","res","rej","ENCODED_TAGS","OPENING","HTML","Uint8Array","BODY","CLOSED","HEAD","BODY_AND_HTML","indexOfUint8Array","b","completeMatch","j","voidCatch","encoder","TextEncoder","streamFromBuffer","chunk","ReadableStream","enqueue","close","streamToBuffer","stream","reader","getReader","chunks","done","read","Buffer","concat","streamToString","decoder","TextDecoder","fatal","aborted","decode","NEXT_REQUEST_META","removeTrailingSlash","parsePath","hashIndex","indexOf","queryIndex","hasQuery","query","hash","addPathPrefix","addPathSuffix","pathHasPrefix","cache","normalizeLocalePath","locales","detectedLocale","lowercasedLocales","locale","segments","segment","REGEX_LOCALHOST_HOSTNAME","parseURL","base","URL","Internal","NextURL","input","baseOrOpts","opts","basePath","analyze","getNextPathnameInfo","i18n","trailingSlash","nextConfig","removePathPrefix","withoutPrefix","pathnameNoDataPrefix","paths","buildId","parseData","i18nProvider","env","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","hostname","getHostname","host","domainLocale","detectDomainLocale","domainItems","item","defaultLocale","some","domains","formatPathname","addLocale","ignorePrefix","lower","forceLocale","formatSearch","search","searchParams","port","protocol","href","origin","password","username","toJSON","clone","Request","ResponseAbortedName","ResponseAborted","clientComponentLoadStart","clientComponentLoadTimes","clientComponentLoadCount","isAbortError","pipeToNodeResponse","readable","waitUntilForEnd","errored","destroyed","createAbortController","response","AbortController","writableFinished","writer","createWriterFromResponse","started","drained","onDrain","on","off","finished","WritableStream","write","NEXT_OTEL_PERFORMANCE_PREFIX","metrics","getClientComponentLoaderMetrics","reset","performance","measure","end","flushHeaders","getTracer","trace","spanName","ok","flush","destroy","pipeTo","RenderResult","fromStatic","metadata","contentType","assignMetadata","isNull","isDynamic","toUnchunkedBuffer","toUnchunkedString","isBuffer","chainStreams","streams","writable","TransformStream","preventClose","nextStream","lastStream","chain","str","responses","encode","NEXT_PATCH_SYMBOL","trackFetchMetric","ctx","requestEndedState","ended","NEXT_DEBUG_BUILD","NEXT_SSG_FETCH_METRICS","isStaticGeneration","fetchMetrics","timeOrigin","now","idx","nextFetchId","stdout","enabled","NO_COLOR","FORCE_COLOR","isTTY","CI","TERM","replaceClose","nextIndex","formatter","open","bold","red","green","yellow","magenta","white","prefixes","wait","warn","ready","event","LOGGING_METHOD","log","prefixedLog","prefixType","shift","consoleMethod","maxSize","calculateSize","sizes","totalSize","touch","evictIfNecessary","evictLeastRecentlyUsed","lruKey","next","lruSize","clear","remove","currentSize","AUTOMATIC_ROUTE_METHODS","handleMethodNotAllowedResponse","invalidServerComponentReactHooks","setMessage","lines","ALLOWED_CODES","NOT_FOUND","FORBIDDEN","UNAUTHORIZED","isHTTPAccessFallbackError","httpStatus","RedirectStatusCode","REDIRECT_ERROR_CODE","isRedirectError","errorCode","destination","statusCode","at","printDebugThrownValueForProspectiveRender","thrownValue","getDigestForWellKnownError","originalErrorStack","stackStart","AppRouterContext","LayoutRouterContext","GlobalLayoutRouterContext","TemplateContext","MissingSlotContext","CacheSignal","earlyListeners","listeners","tickPending","taskPending","noMorePendingCaches","nextTick","inputReady","cacheReady","beginRead","endRead","isDefinitelyAValidIdentifier","describeStringPropertyAccess","stringify","wellKnownProperties","errorRef","current","logErrorOrWarn","__NEXT_DYNAMIC_IO","flushCurrentErrorIfNew","createDedupedByCallsiteServerErrorLoggerDev","getMessage","callStackFrames","CachedParams","makeUntrackedExoticParams","underlyingParams","cachedParams","syncIODev","missingProperties","warnForIncompleteEnumeration","warnForSyncAccess","createParamsAccessError","describeListOfPropertyNames","properties","WrappedNextRouterError","AppRouteRouteModule","sharedModules","resolvedPagePath","nextConfigOutput","serverHooks","actionAsyncStorage","methods","autoImplementMethods","handlers","acc","method","implemented","GET","allow","Allow","sort","OPTIONS","hasNonStaticMethods","dynamic","isStaticGenEnabled","mod","generateStaticParams","Log","toUpperCase","do","handler","actionStore","implicitTags","request","trackingState","dynamicIOEnabled","renderOpts","experimental","dynamicIO","patchFetch","createDedupeFetch","originalFetch","getCacheEntries","resource","cacheKey","keepalive","mode","redirect","credentials","referrer","referrerPolicy","integrity","cacheEntries","entry","fetch","createPatchedFetcher","originFetch","patched","fetchUrl","isInternal","internal","hideSpan","NEXT_OTEL_FETCH_DISABLED","fetchStart","cacheSignal","kind","SpanKind","getRequestMeta","cacheWarning","cacheReasonOverride","finalRevalidate","isDraftMode","isRequestInput","field","getNextField","currentFetchRevalidate","tags","validateTags","validTags","invalidTags","revalidateStore","collectedTags","pageFetchCacheMode","fetchCache","isUsingNoStore","isUnstableNoStore","currentFetchCacheConfig","cacheReason","hasExplicitFetchCacheOptOut","noFetchConfigAndForceDynamic","validateRevalidate","revalidateVal","normalizedRevalidate","_headers","initHeaders","hasUnCacheableHeader","isUnCacheableMethod","hasNoExplicitCacheConfig","autoNoCache","isPrerendering","renderSignal","isCacheableRevalidate","serverComponentsHmrCache","generateCacheKey","fetchIdx","handleUnlock","doOriginalFetch","isStale","requestInputFields","reqInput","reqOptions","_ogBody","otherInput","clonedInit","fetchType","cacheStatus","externalRevalidate","bodyBuffer","arrayBuffer","fetchedData","data","finally","isForegroundRevalidate","isHmrRefreshCache","cachedFetchData","isHmrRefresh","lock","softTags","isFallback","isRevalidate","pendingRevalidate","hasNextConfig","pendingRevalidateKey","revalidatedResult","pendingResponse","__nextPatched","__nextGetStaticStore","_nextOriginalFetch","handlerContext","params","createServerParamsForRoute","createPrerenderParams","fallbackParams","fallbackRouteParams","hasSomeFallbackParams","makeAbortingExoticParams","newValue","enumerable","configurable","makeErroringExoticParams","augmentedUnderlying","isPrefetchRequest","makeDynamicallyTrackedExoticParamsWithDevWarnings","proxiedProperties","unproxiedProperties","proxiedPromise","ownKeys","parsedUrlQueryToParams","userlandRevalidate","defaultRevalidate","prospectiveResult","prospectiveController","prospectiveRenderIsDynamic","prospectiveRoutePrerenderStore","expire","stale","prerenderResumeDataCache","__NEXT_VERBOSE_LOGGING","dynamicReason","finalController","finalRoutePrerenderStore","responseHandled","bodyHandled","createDynamicIOError","Location","isAction","getRedirectStatusCodeFromError","pendingWaitUntil","NEXT_PRIVATE_DEBUG_CACHE","collectedRevalidate","collectedExpire","collectedStale","handle","staticGenerationContext","page","sharedContext","isAppRoute","getServerActionRequestMetadata","actionId","isURLEncodedAction","isMultipartAction","isFetchAction","isServerAction","getImplicitTags","newTags","nextUrl","createRequestStoreImpl","renderResumeDataCache","defaultOnUpdateCookies","setHeader","getHeaders","cleaned","requestCookies","getMutableCookies","userspaceMutableCookies","wrapWithMutableAccessCheck","draftMode","__serverComponentsHmrCache","prerenderManifest","preview","createWorkStore","supportsDynamicResponse","reduce","__incrementalCache","cacheLifeProfiles","nextExport","rootParams","reactLoadableManifest","assetPrefix","afterContext","createAfterContext","onAfterTaskError","forceStaticRequestHandlers","requireStaticRequestHandlers","proxyNextRequest","nextUrlHandlers","trackDynamic","urlCloneSymbol","nextRequestHandlers","nextURLSymbol","requestCloneSymbol","getPathnameFromAbsolutePath","absolutePath","appDir","parts","relativePath","tracer","setRootSpanAttribute","POST","PUT","DELETE","PATCH","searchParamsSymbol","hrefSymbol","toStringSymbol","headersSymbol","cookiesSymbol","forceStaticNextUrlHandlers","URLSearchParams","cleanURL","requireStaticNextUrlHandlers"],"mappings":"uFACA,IAAIA,EAAYC,OAAO,cAAc,CACjCC,EAAmBD,OAAO,wBAAwB,CAClDE,EAAoBF,OAAO,mBAAmB,CAC9CG,EAAeH,OAAO,SAAS,CAAC,cAAc,CAgB9CI,EAAc,CAAC,EAWnB,SAASC,EAAgBC,CAAC,EACxB,IAAIC,EACJ,IAAMC,EAAQ,CACZ,SAAUF,GAAKA,EAAE,IAAI,EAAI,CAAC,KAAK,EAAEA,EAAE,IAAI,CAAC,CAAC,CACzC,YAAaA,GAAMA,CAAAA,EAAE,OAAO,EAAIA,AAAc,IAAdA,EAAE,OAAO,AAAK,GAAM,CAAC,QAAQ,EAAE,AAAC,CAAqB,UAArB,OAAOA,EAAE,OAAO,CAAgB,IAAIG,KAAKH,EAAE,OAAO,EAAIA,EAAE,OAAO,AAAD,EAAG,WAAW,GAAG,CAAC,CAChJ,WAAYA,GAAK,AAAoB,UAApB,OAAOA,EAAE,MAAM,EAAiB,CAAC,QAAQ,EAAEA,EAAE,MAAM,CAAC,CAAC,CACtE,WAAYA,GAAKA,EAAE,MAAM,EAAI,CAAC,OAAO,EAAEA,EAAE,MAAM,CAAC,CAAC,CACjD,WAAYA,GAAKA,EAAE,MAAM,EAAI,SAC7B,aAAcA,GAAKA,EAAE,QAAQ,EAAI,WACjC,aAAcA,GAAKA,EAAE,QAAQ,EAAI,CAAC,SAAS,EAAEA,EAAE,QAAQ,CAAC,CAAC,CACzD,gBAAiBA,GAAKA,EAAE,WAAW,EAAI,cACvC,aAAcA,GAAKA,EAAE,QAAQ,EAAI,CAAC,SAAS,EAAEA,EAAE,QAAQ,CAAC,CAAC,CAC1D,CAAC,MAAM,CAACI,SACHC,EAAc,CAAC,EAAEL,EAAE,IAAI,CAAC,CAAC,EAAEM,mBAAmB,AAAkB,MAAjBL,CAAAA,EAAKD,EAAE,KAAK,AAAD,EAAaC,EAAK,IAAI,CAAC,CACvF,OAAOC,AAAiB,IAAjBA,EAAM,MAAM,CAASG,EAAc,CAAC,EAAEA,EAAY,EAAE,EAAEH,EAAM,IAAI,CAAC,MAAM,CAAC,AACjF,CACA,SAASK,EAAYC,CAAM,EACzB,IAAMC,EAAsB,IAAIC,IAChC,IAAK,IAAMC,KAAQH,EAAO,KAAK,CAAC,OAAQ,CACtC,GAAI,CAACG,EACH,SACF,IAAMC,EAAUD,EAAK,OAAO,CAAC,KAC7B,GAAIC,AAAY,KAAZA,EAAgB,CAClBH,EAAI,GAAG,CAACE,EAAM,QACd,QACF,CACA,GAAM,CAACE,EAAKC,EAAM,CAAG,CAACH,EAAK,KAAK,CAAC,EAAGC,GAAUD,EAAK,KAAK,CAACC,EAAU,GAAG,CACtE,GAAI,CACFH,EAAI,GAAG,CAACI,EAAKE,mBAAmBD,AAAS,MAATA,EAAgBA,EAAQ,QAC1D,CAAE,KAAM,CACR,CACF,CACA,OAAOL,CACT,CACA,SAASO,EAAeC,CAAS,MA8CVC,EAKAA,EAlDrB,GAAI,CAACD,EACH,OAEF,GAAM,CAAC,CAACE,EAAML,EAAM,CAAE,GAAGM,EAAW,CAAGb,EAAYU,GAC7C,CACJI,OAAAA,CAAM,CACNC,QAAAA,CAAO,CACPC,SAAAA,CAAQ,CACRC,OAAAA,CAAM,CACNC,KAAAA,CAAI,CACJC,SAAAA,CAAQ,CACRC,OAAAA,CAAM,CACNC,YAAAA,CAAW,CACXC,SAAAA,CAAQ,CACT,CAAGnC,OAAO,WAAW,CACpB0B,EAAW,GAAG,CAAC,CAAC,CAACP,EAAKiB,EAAO,GAAK,CAChCjB,EAAI,WAAW,GAAG,OAAO,CAAC,KAAM,IAChCiB,EACD,GAeH,OAAOC,AAET,SAAiBC,CAAC,EAChB,IAAMC,EAAO,CAAC,EACd,IAAK,IAAMpB,KAAOmB,EACZA,CAAC,CAACnB,EAAI,EACRoB,CAAAA,CAAI,CAACpB,EAAI,CAAGmB,CAAC,CAACnB,EAAI,AAAD,EAGrB,OAAOoB,CACT,EAvBiB,CACbd,KAAAA,EACA,MAAOJ,mBAAmBD,GAC1BO,OAAAA,EACA,GAAGC,GAAW,CAAE,QAAS,IAAInB,KAAKmB,EAAS,CAAC,CAC5C,GAAGC,GAAY,CAAE,SAAU,EAAK,CAAC,CACjC,GAAG,AAAkB,UAAlB,OAAOC,GAAuB,CAAE,OAAQU,OAAOV,EAAQ,CAAC,CAC3DC,KAAAA,EACA,GAAGC,GAAY,CAAE,QAAQ,CAmBpBS,EAAU,QAAQ,CADzBjB,EAASA,CADYA,EAjBsBQ,GAkB3B,WAAW,IACSR,EAAS,KAAK,CAnBG,CAAC,CACpD,GAAGS,GAAU,CAAE,OAAQ,EAAK,CAAC,CAC7B,GAAGE,GAAY,CAAE,QAAQ,CAsBpBO,EAAS,QAAQ,CADxBlB,EAASA,CADYA,EApBsBW,GAqB3B,WAAW,IACQX,EAAS,KAAK,CAtBI,CAAC,CACpD,GAAGU,GAAe,CAAE,YAAa,EAAK,CAAC,AACzC,EAEF,CA/EAS,AAhBe,EAACC,EAAQC,KACtB,IAAK,IAAIpB,KAAQoB,EACf9C,EAAU6C,EAAQnB,EAAM,CAAE,IAAKoB,CAAG,CAACpB,EAAK,CAAE,WAAY,EAAK,EAC/D,GAaSrB,EAAa,CACpB,eAAgB,IAAM0C,EACtB,gBAAiB,IAAMC,EACvB,YAAa,IAAMlC,EACnB,eAAgB,IAAMS,EACtB,gBAAiB,IAAMjB,CACzB,GACA2C,EAAO,OAAO,CAnBI,EAACC,EAAIC,EAAMC,EAAQC,KACnC,GAAIF,GAAQ,AAAgB,UAAhB,OAAOA,GAAqB,AAAgB,YAAhB,OAAOA,EAC7C,IAAK,IAAI/B,KAAOjB,EAAkBgD,GAC3B/C,EAAa,IAAI,CAAC8C,EAAI9B,IAAQA,IAAQgC,GACzCpD,EAAUkD,EAAI9B,EAAK,CAAE,IAAK,IAAM+B,CAAI,CAAC/B,EAAI,CAAE,WAAY,CAAEiC,CAAAA,EAAOnD,EAAiBiD,EAAM/B,EAAG,GAAMiC,EAAK,UAAU,AAAC,GAEtH,OAAOH,CACT,GACwClD,EAAU,CAAC,EAAG,aAAc,CAAE,MAAO,EAAK,GAWpDK,GAkF9B,IAAIqC,EAAY,CAAC,SAAU,MAAO,OAAO,CAKrCC,EAAW,CAAC,MAAO,SAAU,OAAO,CA0DpCI,EAAiB,MACnB,YAAYO,CAAc,CAAE,CAE1B,IAAI,CAAC,OAAO,CAAmB,IAAIrC,IACnC,IAAI,CAAC,QAAQ,CAAGqC,EAChB,IAAMC,EAASD,EAAe,GAAG,CAAC,UAClC,GAAIC,EAEF,IAAK,GAAM,CAAC7B,EAAML,EAAM,GADTP,EAAYyC,GAEzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC7B,EAAM,CAAEA,KAAAA,EAAML,MAAAA,CAAM,EAG3C,CACA,CAACmC,OAAO,QAAQ,CAAC,EAAG,CAClB,OAAO,IAAI,CAAC,OAAO,CAACA,OAAO,QAAQ,CAAC,EACtC,CAIA,IAAI,MAAO,CACT,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,AAC1B,CACA,IAAI,GAAGC,CAAI,CAAE,CACX,IAAM/B,EAAO,AAAmB,UAAnB,OAAO+B,CAAI,CAAC,EAAE,CAAgBA,CAAI,CAAC,EAAE,CAAGA,CAAI,CAAC,EAAE,CAAC,IAAI,CACjE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC/B,EAC1B,CACA,OAAO,GAAG+B,CAAI,CAAE,CACd,IAAIjD,EACJ,IAAMsC,EAAMY,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EACnC,GAAI,CAACD,EAAK,MAAM,CACd,OAAOX,EAAI,GAAG,CAAC,CAAC,CAACa,EAAGtC,EAAM,GAAKA,GAEjC,IAAMK,EAAO,AAAmB,UAAnB,OAAO+B,CAAI,CAAC,EAAE,CAAgBA,CAAI,CAAC,EAAE,CAAG,AAAkB,MAAjBjD,CAAAA,EAAKiD,CAAI,CAAC,EAAE,AAAD,EAAa,KAAK,EAAIjD,EAAG,IAAI,CAC9F,OAAOsC,EAAI,MAAM,CAAC,CAAC,CAACc,EAAE,GAAKA,IAAMlC,GAAM,GAAG,CAAC,CAAC,CAACiC,EAAGtC,EAAM,GAAKA,EAC7D,CACA,IAAIK,CAAI,CAAE,CACR,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAACA,EAC1B,CACA,IAAI,GAAG+B,CAAI,CAAE,CACX,GAAM,CAAC/B,EAAML,EAAM,CAAGoC,AAAgB,IAAhBA,EAAK,MAAM,CAAS,CAACA,CAAI,CAAC,EAAE,CAAC,IAAI,CAAEA,CAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAGA,EACpEzC,EAAM,IAAI,CAAC,OAAO,CAMxB,OALAA,EAAI,GAAG,CAACU,EAAM,CAAEA,KAAAA,EAAML,MAAAA,CAAM,GAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CACf,SACAqC,MAAM,IAAI,CAAC1C,GAAK,GAAG,CAAC,CAAC,CAAC2C,EAAGtB,EAAO,GAAK/B,EAAgB+B,IAAS,IAAI,CAAC,OAE9D,IAAI,AACb,CAIA,OAAOwB,CAAK,CAAE,CACZ,IAAM7C,EAAM,IAAI,CAAC,OAAO,CAClB8C,EAAS,AAACJ,MAAM,OAAO,CAACG,GAA6BA,EAAM,GAAG,CAAC,AAACnC,GAASV,EAAI,MAAM,CAACU,IAAnDV,EAAI,MAAM,CAAC6C,GAKlD,OAJA,IAAI,CAAC,QAAQ,CAAC,GAAG,CACf,SACAH,MAAM,IAAI,CAAC1C,GAAK,GAAG,CAAC,CAAC,CAAC2C,EAAGtC,EAAM,GAAKf,EAAgBe,IAAQ,IAAI,CAAC,OAE5DyC,CACT,CAIA,OAAQ,CAEN,OADA,IAAI,CAAC,MAAM,CAACJ,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KACjC,IAAI,AACb,CAIA,CAACF,OAAO,GAAG,CAAC,+BAA+B,EAAG,CAC5C,MAAO,CAAC,eAAe,EAAEO,KAAK,SAAS,CAAC9D,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,AAC7E,CACA,UAAW,CACT,MAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,AAAC+D,GAAM,CAAC,EAAEA,EAAE,IAAI,CAAC,CAAC,EAAEnD,mBAAmBmD,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,KAChG,CACF,EAGIhB,EAAkB,MACpB,YAAYiB,CAAe,CAAE,KAGvBzD,EAAI0D,EAAIC,CADZ,KAAI,CAAC,OAAO,CAAmB,IAAIlD,IAEnC,IAAI,CAAC,QAAQ,CAAGgD,EAChB,IAAMzC,EAAY,AAAkJ,MAAjJ2C,CAAAA,EAAK,AAA0F,MAAzFD,CAAAA,EAAK,AAAuC,MAAtC1D,CAAAA,EAAKyD,EAAgB,YAAY,AAAD,EAAa,KAAK,EAAIzD,EAAG,IAAI,CAACyD,EAAe,EAAaC,EAAKD,EAAgB,GAAG,CAAC,aAAY,EAAaE,EAAK,EAAE,CAElL,IAAK,IAAMC,KADWV,MAAM,OAAO,CAAClC,GAAaA,EAAY6C,AA3IjE,SAA4BC,CAAa,EACvC,GAAI,CAACA,EACH,MAAO,EAAE,CACX,IAEIC,EACAC,EACAC,EACAC,EACAC,EANAC,EAAiB,EAAE,CACnBC,EAAM,EAMV,SAASC,IACP,KAAOD,EAAMP,EAAc,MAAM,EAAI,KAAK,IAAI,CAACA,EAAc,MAAM,CAACO,KAClEA,GAAO,EAET,OAAOA,EAAMP,EAAc,MAAM,AACnC,CAKA,KAAOO,EAAMP,EAAc,MAAM,EAAE,CAGjC,IAFAC,EAAQM,EACRF,EAAwB,GACjBG,KAEL,GAAIN,AAAO,MADXA,CAAAA,EAAKF,EAAc,MAAM,CAACO,EAAG,EACb,CAKd,IAJAJ,EAAYI,EACZA,GAAO,EACPC,IACAJ,EAAYG,EACLA,EAAMP,EAAc,MAAM,EAZ9BE,AAAO,MADdA,CAAAA,EAAKF,EAAc,MAAM,CAACO,EAAG,GACRL,AAAO,MAAPA,GAAcA,AAAO,MAAPA,GAa7BK,GAAO,CAELA,CAAAA,EAAMP,EAAc,MAAM,EAAIA,AAA8B,MAA9BA,EAAc,MAAM,CAACO,IACrDF,EAAwB,GACxBE,EAAMH,EACNE,EAAe,IAAI,CAACN,EAAc,SAAS,CAACC,EAAOE,IACnDF,EAAQM,GAERA,EAAMJ,EAAY,CAEtB,MACEI,GAAO,EAGP,EAACF,GAAyBE,GAAOP,EAAc,MAAM,AAAD,GACtDM,EAAe,IAAI,CAACN,EAAc,SAAS,CAACC,EAAOD,EAAc,MAAM,EAE3E,CACA,OAAOM,CACT,EAyFoFpD,GACtC,CACxC,IAAMuD,EAASxD,EAAe6C,GAC1BW,GACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAACA,EAAO,IAAI,CAAEA,EAClC,CACF,CAIA,IAAI,GAAGtB,CAAI,CAAE,CACX,IAAMrC,EAAM,AAAmB,UAAnB,OAAOqC,CAAI,CAAC,EAAE,CAAgBA,CAAI,CAAC,EAAE,CAAGA,CAAI,CAAC,EAAE,CAAC,IAAI,CAChE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAACrC,EAC1B,CAIA,OAAO,GAAGqC,CAAI,CAAE,CACd,IAAIjD,EACJ,IAAMsC,EAAMY,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAC1C,GAAI,CAACD,EAAK,MAAM,CACd,OAAOX,EAET,IAAM1B,EAAM,AAAmB,UAAnB,OAAOqC,CAAI,CAAC,EAAE,CAAgBA,CAAI,CAAC,EAAE,CAAG,AAAkB,MAAjBjD,CAAAA,EAAKiD,CAAI,CAAC,EAAE,AAAD,EAAa,KAAK,EAAIjD,EAAG,IAAI,CAC7F,OAAOsC,EAAI,MAAM,CAAC,AAACvC,GAAMA,EAAE,IAAI,GAAKa,EACtC,CACA,IAAIM,CAAI,CAAE,CACR,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAACA,EAC1B,CAIA,IAAI,GAAG+B,CAAI,CAAE,CACX,GAAM,CAAC/B,EAAML,EAAON,EAAO,CAAG0C,AAAgB,IAAhBA,EAAK,MAAM,CAAS,CAACA,CAAI,CAAC,EAAE,CAAC,IAAI,CAAEA,CAAI,CAAC,EAAE,CAAC,KAAK,CAAEA,CAAI,CAAC,EAAE,CAAC,CAAGA,EACrFzC,EAAM,IAAI,CAAC,OAAO,CAGxB,OAFAA,EAAI,GAAG,CAACU,EAAMsD,AAyBlB,SAAyBjE,EAAS,CAAE,KAAM,GAAI,MAAO,EAAG,CAAC,EAUvD,MAT8B,UAA1B,OAAOA,EAAO,OAAO,EACvBA,CAAAA,EAAO,OAAO,CAAG,IAAIL,KAAKK,EAAO,OAAO,GAEtCA,EAAO,MAAM,EACfA,CAAAA,EAAO,OAAO,CAAG,IAAIL,KAAKA,KAAK,GAAG,GAAKK,AAAgB,IAAhBA,EAAO,MAAM,CAAM,EAExDA,CAAAA,AAAgB,OAAhBA,EAAO,IAAI,EAAaA,AAAgB,KAAK,IAArBA,EAAO,IAAI,AAAU,GAC/CA,CAAAA,EAAO,IAAI,CAAG,GAAE,EAEXA,CACT,EApCkC,CAAEW,KAAAA,EAAML,MAAAA,EAAO,GAAGN,CAAM,AAAC,IACvDkE,AAiBJ,SAAiBC,CAAG,CAAEC,CAAO,EAE3B,IAAK,GAAM,EAAG9D,EAAM,GADpB8D,EAAQ,MAAM,CAAC,cACSD,GAAK,CAC3B,IAAME,EAAa9E,EAAgBe,GACnC8D,EAAQ,MAAM,CAAC,aAAcC,EAC/B,CACF,EAvBYpE,EAAK,IAAI,CAAC,QAAQ,EACnB,IAAI,AACb,CAIA,OAAO,GAAGyC,CAAI,CAAE,CACd,GAAM,CAAC/B,EAAM2D,EAAQ,CAAG,AAAmB,UAAnB,OAAO5B,CAAI,CAAC,EAAE,CAAgB,CAACA,CAAI,CAAC,EAAE,CAAC,CAAG,CAACA,CAAI,CAAC,EAAE,CAAC,IAAI,CAAEA,CAAI,CAAC,EAAE,CAAC,CACzF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAE,GAAG4B,CAAO,CAAE3D,KAAAA,EAAM,MAAO,GAAI,QAAyB,IAAIhB,KAAK,EAAG,EACtF,CACA,CAAC8C,OAAO,GAAG,CAAC,+BAA+B,EAAG,CAC5C,MAAO,CAAC,gBAAgB,EAAEO,KAAK,SAAS,CAAC9D,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,AAC9E,CACA,UAAW,CACT,MAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAACK,GAAiB,IAAI,CAAC,KAC9D,CACF,C,oDCvTwGgF,EAM7DC,EAAyBhD,EAAyBiD,EAAY5B,CANtD,cAA7B,OAAO6B,qBAAkCA,CAAAA,oBAAoB,EAAE,CAACC,UAAU,GAAE,EAM/FC,CANqGL,EAAE,CAAC,GAMtG,KAAK,CAAyI,SAAeA,CAAC,CAACK,CAAC,EAAE,GAAG,AAAW,UAAX,OAAOL,EAAc,MAAM,AAAIM,UAAU,iCAAyF,IAAI,IAAxDrD,EAAE,CAAC,EAAkBsD,EAAEP,EAAE,KAAK,CAACE,GAAOM,EAAElC,AAA7B+B,CAAAA,GAAG,CAAC,GAA2B,MAAM,EAAEJ,EAAUQ,EAAE,EAAEA,EAAEF,EAAE,MAAM,CAACE,IAAI,CAAC,IAAIC,EAAEH,CAAC,CAACE,EAAE,CAAKE,EAAED,EAAE,OAAO,CAAC,KAAK,IAAGC,CAAAA,EAAE,IAAY,IAAIjC,EAAEgC,EAAE,MAAM,CAAC,EAAEC,GAAG,IAAI,GAAO1F,EAAEyF,EAAE,MAAM,CAAC,EAAEC,EAAED,EAAE,MAAM,EAAE,IAAI,EAAM,MAAKzF,CAAC,CAAC,EAAE,EAAEA,CAAAA,EAAEA,EAAE,KAAK,CAAC,EAAE,GAAE,EAAK2F,KAAAA,GAAW3D,CAAC,CAACyB,EAAE,EAAEzB,CAAAA,CAAC,CAACyB,EAAE,CAACmC,AAA2pC,SAAmBb,CAAC,CAACK,CAAC,EAAE,GAAG,CAAC,OAAOA,EAAEL,EAAE,CAAC,MAAMK,EAAE,CAAC,OAAOL,CAAC,CAAC,EAA3sC/E,EAAEuF,EAAC,EAAE,CAAC,OAAOvD,CAAC,EAAtfoD,AANwGL,EAMtG,SAAS,CAA4e,SAAmBA,CAAC,CAACK,CAAC,CAACJ,CAAC,EAAE,IAAIC,EAAED,GAAG,CAAC,EAAMM,EAAEL,EAAE,MAAM,EAAEjD,EAAE,GAAG,AAAW,YAAX,OAAOsD,EAAgB,MAAM,AAAID,UAAU,4BAA4B,GAAG,CAAChC,EAAE,IAAI,CAAC0B,GAAI,MAAM,AAAIM,UAAU,4BAA4B,IAAIE,EAAED,EAAEF,GAAG,GAAGG,GAAG,CAAClC,EAAE,IAAI,CAACkC,GAAI,MAAM,AAAIF,UAAU,2BAA2B,IAAIG,EAAET,EAAE,IAAIQ,EAAE,GAAG,MAAMN,EAAE,MAAM,CAAC,CAAC,IAAIQ,EAAER,EAAE,MAAM,CAAC,EAAE,GAAGY,MAAMJ,IAAI,CAACK,SAASL,GAAI,MAAM,AAAIJ,UAAU,4BAA4BG,GAAG,aAAaO,KAAK,KAAK,CAACN,EAAE,CAAC,GAAGR,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC5B,EAAE,IAAI,CAAC4B,EAAE,MAAM,EAAG,MAAM,AAAII,UAAU,4BAA4BG,GAAG,YAAYP,EAAE,MAAM,CAAC,GAAGA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC5B,EAAE,IAAI,CAAC4B,EAAE,IAAI,EAAG,MAAM,AAAII,UAAU,0BAA0BG,GAAG,UAAUP,EAAE,IAAI,CAAC,GAAGA,EAAE,OAAO,CAAC,CAAC,GAAG,AAA+B,YAA/B,OAAOA,EAAE,OAAO,CAAC,WAAW,CAAe,MAAM,AAAII,UAAU,6BAA6BG,GAAG,aAAaP,EAAE,OAAO,CAAC,WAAW,EAAE,CAA2D,GAAvDA,EAAE,QAAQ,EAAEO,CAAAA,GAAG,YAAW,EAAKP,EAAE,MAAM,EAAEO,CAAAA,GAAG,UAAS,EAAKP,EAAE,QAAQ,CAAyE,OAAjE,AAAoB,UAApB,OAAOA,EAAE,QAAQ,CAAYA,EAAE,QAAQ,CAAC,WAAW,GAAGA,EAAE,QAAQ,EAAW,IAAK,GAAsE,IAAI,SAArEO,GAAG,oBAAoB,KAAM,KAAI,MAAMA,GAAG,iBAAiB,KAAgD,KAAI,OAAOA,GAAG,kBAAkB,KAAM,SAAQ,MAAM,AAAIH,UAAU,6BAA6B,CAAE,OAAOG,CAAC,EAA9lDR,EAAEjE,mBAAuBiB,EAAE1B,mBAAuB2E,EAAE,MAAU5B,EAAE,wCAA+lDX,EAAO,OAAO,CAACqC,C,iDCNztD,AAAC,MAAK,aAAa,IAAIA,EAAE,CAAC,IAAIA,IAAI,IAAI/C,EAAEtC,OAAO,SAAS,CAAC,cAAc,CAAC2D,EAAE,IAAI,SAAS2C,IAAS,CAA2F,SAASC,EAAGlB,CAAC,CAAC/C,CAAC,CAACqB,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC0B,EAAE,IAAI,CAAC,OAAO,CAAC/C,EAAE,IAAI,CAAC,IAAI,CAACqB,GAAG,EAAK,CAAC,SAAS6C,EAAYnB,CAAC,CAAC/C,CAAC,CAACoD,CAAC,CAACJ,CAAC,CAACO,CAAC,EAAE,GAAG,AAAW,YAAX,OAAOH,EAAgB,MAAM,AAAIC,UAAU,mCAAmC,IAAIC,EAAE,IAAIW,EAAGb,EAAEJ,GAAGD,EAAEQ,GAAGG,EAAErC,EAAEA,EAAErB,EAAEA,EAAoI,OAA9H+C,EAAE,OAAO,CAACW,EAAE,CAA0CX,EAAE,OAAO,CAACW,EAAE,CAAC,EAAE,CAA2BX,EAAE,OAAO,CAACW,EAAE,CAAC,CAACX,EAAE,OAAO,CAACW,EAAE,CAACJ,EAAE,CAAvDP,EAAE,OAAO,CAACW,EAAE,CAAC,IAAI,CAACJ,GAA3EP,CAAAA,EAAE,OAAO,CAACW,EAAE,CAACJ,EAAEP,EAAE,YAAY,EAAC,EAA0FA,CAAC,CAAC,SAASoB,EAAWpB,CAAC,CAAC/C,CAAC,EAAK,AAAmB,GAAnB,EAAE+C,EAAE,YAAY,CAAKA,EAAE,OAAO,CAAC,IAAIiB,EAAY,OAAOjB,EAAE,OAAO,CAAC/C,EAAE,CAAC,SAASoE,IAAe,IAAI,CAAC,OAAO,CAAC,IAAIJ,EAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAArlBtG,OAAO,MAAM,GAAEsG,EAAO,SAAS,CAACtG,OAAO,MAAM,CAAC,MAAU,AAAC,KAAIsG,CAAK,EAAG,SAAS,EAAC3C,CAAAA,EAAE,EAAI,GAAigB+C,EAAa,SAAS,CAAC,UAAU,CAAC,WAAsB,IAAShB,EAAEJ,EAAPD,EAAE,EAAE,CAAK,GAAG,AAAoB,IAApB,IAAI,CAAC,YAAY,CAAK,OAAOA,EAAE,IAAIC,KAAKI,EAAE,IAAI,CAAC,OAAO,CAAKpD,EAAE,IAAI,CAACoD,EAAEJ,IAAGD,EAAE,IAAI,CAAC1B,EAAE2B,EAAE,KAAK,CAAC,GAAGA,UAAG,AAAGtF,OAAO,qBAAqB,CAASqF,EAAE,MAAM,CAACrF,OAAO,qBAAqB,CAAC0F,IAAWL,CAAC,EAAEqB,EAAa,SAAS,CAAC,SAAS,CAAC,SAAmBrB,CAAC,EAAE,IAAI/C,EAAEqB,EAAEA,EAAE0B,EAAEA,EAAEK,EAAE,IAAI,CAAC,OAAO,CAACpD,EAAE,CAAC,GAAG,CAACoD,EAAE,MAAM,EAAE,CAAC,GAAGA,EAAE,EAAE,CAAC,MAAM,CAACA,EAAE,EAAE,CAAC,CAAC,IAAI,IAAIJ,EAAE,EAAEO,EAAEH,EAAE,MAAM,CAACE,EAAE,AAAInC,MAAMoC,GAAGP,EAAEO,EAAEP,IAAKM,CAAC,CAACN,EAAE,CAACI,CAAC,CAACJ,EAAE,CAAC,EAAE,CAAC,OAAOM,CAAC,EAAEc,EAAa,SAAS,CAAC,aAAa,CAAC,SAAuBrB,CAAC,EAAE,IAAI/C,EAAEqB,EAAEA,EAAE0B,EAAEA,EAAEK,EAAE,IAAI,CAAC,OAAO,CAACpD,EAAE,QAAC,AAAIoD,EAAcA,EAAE,EAAE,CAAQ,EAASA,EAAE,MAAM,CAAlC,CAAkC,EAAEgB,EAAa,SAAS,CAAC,IAAI,CAAC,SAAcrB,CAAC,CAAC/C,CAAC,CAACoD,CAAC,CAACJ,CAAC,CAACO,CAAC,CAACD,CAAC,EAAE,IAAII,EAAErC,EAAEA,EAAE0B,EAAEA,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAACW,EAAE,CAAC,MAAO,GAAM,IAAyC1F,EAAEqG,EAAvCpB,EAAE,IAAI,CAAC,OAAO,CAACS,EAAE,CAACY,EAAEC,UAAU,MAAM,CAAK,GAAGtB,EAAE,EAAE,CAAC,CAAsD,OAAlDA,EAAE,IAAI,EAAC,IAAI,CAAC,cAAc,CAACF,EAAEE,EAAE,EAAE,CAACU,KAAAA,EAAU,IAAaW,GAAG,KAAK,EAAE,OAAOrB,EAAE,EAAE,CAAC,IAAI,CAACA,EAAE,OAAO,EAAE,EAAK,MAAK,EAAE,OAAOA,EAAE,EAAE,CAAC,IAAI,CAACA,EAAE,OAAO,CAACjD,GAAG,EAAK,MAAK,EAAE,OAAOiD,EAAE,EAAE,CAAC,IAAI,CAACA,EAAE,OAAO,CAACjD,EAAEoD,GAAG,EAAK,MAAK,EAAE,OAAOH,EAAE,EAAE,CAAC,IAAI,CAACA,EAAE,OAAO,CAACjD,EAAEoD,EAAEJ,GAAG,EAAK,MAAK,EAAE,OAAOC,EAAE,EAAE,CAAC,IAAI,CAACA,EAAE,OAAO,CAACjD,EAAEoD,EAAEJ,EAAEO,GAAG,EAAK,MAAK,EAAE,OAAON,EAAE,EAAE,CAAC,IAAI,CAACA,EAAE,OAAO,CAACjD,EAAEoD,EAAEJ,EAAEO,EAAED,GAAG,EAAI,CAAC,IAAIe,EAAE,EAAErG,EAAE,AAAImD,MAAMmD,EAAE,GAAGD,EAAEC,EAAED,IAAKrG,CAAC,CAACqG,EAAE,EAAE,CAACE,SAAS,CAACF,EAAE,CAACpB,EAAE,EAAE,CAAC,KAAK,CAACA,EAAE,OAAO,CAACjF,EAAE,KAAK,CAAC,IAAeyF,EAAXrC,EAAE6B,EAAE,MAAM,CAAG,IAAIoB,EAAE,EAAEA,EAAEjD,EAAEiD,IAAgE,OAAxDpB,CAAC,CAACoB,EAAE,CAAC,IAAI,EAAC,IAAI,CAAC,cAAc,CAACtB,EAAEE,CAAC,CAACoB,EAAE,CAAC,EAAE,CAACV,KAAAA,EAAU,IAAaW,GAAG,KAAK,EAAErB,CAAC,CAACoB,EAAE,CAAC,EAAE,CAAC,IAAI,CAACpB,CAAC,CAACoB,EAAE,CAAC,OAAO,EAAE,KAAM,MAAK,EAAEpB,CAAC,CAACoB,EAAE,CAAC,EAAE,CAAC,IAAI,CAACpB,CAAC,CAACoB,EAAE,CAAC,OAAO,CAACrE,GAAG,KAAM,MAAK,EAAEiD,CAAC,CAACoB,EAAE,CAAC,EAAE,CAAC,IAAI,CAACpB,CAAC,CAACoB,EAAE,CAAC,OAAO,CAACrE,EAAEoD,GAAG,KAAM,MAAK,EAAEH,CAAC,CAACoB,EAAE,CAAC,EAAE,CAAC,IAAI,CAACpB,CAAC,CAACoB,EAAE,CAAC,OAAO,CAACrE,EAAEoD,EAAEJ,GAAG,KAAM,SAAQ,GAAG,CAAChF,EAAE,IAAIyF,EAAE,EAAEzF,EAAE,AAAImD,MAAMmD,EAAE,GAAGb,EAAEa,EAAEb,IAAKzF,CAAC,CAACyF,EAAE,EAAE,CAACc,SAAS,CAACd,EAAE,CAACR,CAAC,CAACoB,EAAE,CAAC,EAAE,CAAC,KAAK,CAACpB,CAAC,CAACoB,EAAE,CAAC,OAAO,CAACrG,EAAE,CAAE,CAAC,MAAO,EAAI,EAAEoG,EAAa,SAAS,CAAC,EAAE,CAAC,SAAYrB,CAAC,CAAC/C,CAAC,CAACqB,CAAC,EAAE,OAAO6C,EAAY,IAAI,CAACnB,EAAE/C,EAAEqB,EAAE,GAAM,EAAE+C,EAAa,SAAS,CAAC,IAAI,CAAC,SAAcrB,CAAC,CAAC/C,CAAC,CAACqB,CAAC,EAAE,OAAO6C,EAAY,IAAI,CAACnB,EAAE/C,EAAEqB,EAAE,GAAK,EAAE+C,EAAa,SAAS,CAAC,cAAc,CAAC,SAAwBrB,CAAC,CAAC/C,CAAC,CAACoD,CAAC,CAACJ,CAAC,EAAE,IAAIO,EAAElC,EAAEA,EAAE0B,EAAEA,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAACQ,EAAE,CAAC,OAAO,IAAI,CAAC,GAAG,CAACvD,EAAsB,OAAnBmE,EAAW,IAAI,CAACZ,GAAU,IAAI,CAAC,IAAID,EAAE,IAAI,CAAC,OAAO,CAACC,EAAE,CAAC,GAAGD,EAAE,EAAE,CAAKA,EAAE,EAAE,GAAGtD,GAAI,AAACgD,IAAGM,EAAE,IAAI,EAAI,AAACF,GAAGE,EAAE,OAAO,GAAGF,GAAIe,EAAW,IAAI,CAACZ,OAAQ,CAAC,IAAI,IAAIG,EAAE,EAAET,EAAE,EAAE,CAACqB,EAAEhB,EAAE,MAAM,CAACI,EAAEY,EAAEZ,IAAQJ,CAAAA,CAAC,CAACI,EAAE,CAAC,EAAE,GAAG1D,GAAGgD,GAAG,CAACM,CAAC,CAACI,EAAE,CAAC,IAAI,EAAEN,GAAGE,CAAC,CAACI,EAAE,CAAC,OAAO,GAAGN,CAAAA,GAAGH,EAAE,IAAI,CAACK,CAAC,CAACI,EAAE,CAAMT,CAAAA,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAACM,EAAE,CAACN,AAAW,IAAXA,EAAE,MAAM,CAAKA,CAAC,CAAC,EAAE,CAACA,EAAOkB,EAAW,IAAI,CAACZ,EAAE,CAAC,OAAO,IAAI,EAAEa,EAAa,SAAS,CAAC,kBAAkB,CAAC,SAA4BrB,CAAC,EAAE,IAAI/C,EAAyG,OAApG+C,GAAG/C,EAAEqB,EAAEA,EAAE0B,EAAEA,EAAK,IAAI,CAAC,OAAO,CAAC/C,EAAE,EAACmE,EAAW,IAAI,CAACnE,KAAQ,IAAI,CAAC,OAAO,CAAC,IAAIgE,EAAO,IAAI,CAAC,YAAY,CAAC,GAAS,IAAI,EAAEI,EAAa,SAAS,CAAC,GAAG,CAACA,EAAa,SAAS,CAAC,cAAc,CAACA,EAAa,SAAS,CAAC,WAAW,CAACA,EAAa,SAAS,CAAC,EAAE,CAACA,EAAa,QAAQ,CAAC/C,EAAE+C,EAAa,YAAY,CAACA,EAAsBrB,EAAE,OAAO,CAACqB,CAAa,EAAE,IAAIrB,IAAIA,EAAE,OAAO,CAAC,CAACA,EAAE/C,KAAKA,EAAEA,GAAI,MAAK,GAAU+C,EAAE,IAAI,CAAEA,GAAG,IAAIyB,QAASzB,IAAIA,EAAE/C,IAAI,GAAI,IAAI,CAAE,IAAI+C,GAAMA,GAAG,IAAIyB,QAASzB,IAAIA,EAAE/C,IAAI,GAAI,IAAI,CAAE,KAAK,MAAM+C,CAAC,IAAM,EAAE,IAAI,CAACA,EAAE/C,KAAKtC,OAAO,cAAc,CAACsC,EAAE,aAAa,CAAC,MAAM,EAAI,GAAyIA,EAAE,OAAU,CAAlJ,SAAoB+C,CAAC,CAAC/C,CAAC,CAACqB,CAAC,EAAE,IAAI+B,EAAE,EAAMJ,EAAED,EAAE,MAAM,CAAC,KAAMC,EAAE,GAAE,CAAC,IAAMO,EAAEP,EAAE,EAAE,EAAMM,EAAEF,EAAEG,CAAKlC,AAAW,IAAXA,EAAE0B,CAAC,CAACO,EAAE,CAACtD,IAAOoD,EAAE,EAAEE,EAAEN,GAAGO,EAAE,GAAOP,EAAEO,CAAE,CAAC,OAAOH,CAAC,CAAwB,EAAE,IAAI,CAACL,EAAE/C,EAAEqB,KAAK3D,OAAO,cAAc,CAACsC,EAAE,aAAa,CAAC,MAAM,EAAI,GAAG,IAAMoD,EAAE/B,EAAE,IAAggBrB,CAAAA,EAAE,OAAU,CAAvgB,MAAoB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ+C,CAAC,CAAC/C,CAAC,CAAC,CAAiC,IAAMqB,EAAE,CAAC,SAASrB,AAAlDA,CAAAA,EAAEtC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,EAAEsC,EAAC,EAAsB,QAAQ,CAAC,IAAI+C,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE/C,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAACqB,GAAG,MAAM,CAAC,IAAM2B,EAAEI,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC/B,EAAG,CAAC0B,EAAE/C,IAAIA,EAAE,QAAQ,CAAC+C,EAAE,QAAQ,EAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAACC,EAAE,EAAE3B,EAAE,CAAC,SAAS,CAAC,IAAM0B,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,OAAOA,MAAAA,EAAqB,KAAK,EAAEA,EAAE,GAAG,CAAC,OAAOA,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAE/C,GAAGA,EAAE,QAAQ,GAAG+C,EAAE,QAAQ,EAAG,GAAG,CAAEA,GAAGA,EAAE,GAAG,CAAE,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAA2B,EAAE,IAAI,CAACA,EAAE/C,EAAEqB,KAAK,IAAM+B,EAAE/B,EAAE,IAAK,OAAMoD,UAAqBC,MAAM,YAAY3B,CAAC,CAAC,CAAC,KAAK,CAACA,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAM4B,EAAS,CAAC5B,EAAE/C,EAAEqB,IAAI,IAAImD,QAAS,CAACxB,EAAEO,KAAK,GAAG,AAAW,UAAX,OAAOvD,GAAcA,EAAE,EAAG,MAAM,AAAIqD,UAAU,mDAAmD,GAAGrD,IAAI4E,IAAS,CAAC5B,EAAED,GAAG,MAAM,CAAC,IAAMO,EAAEuB,WAAY,KAAK,GAAG,AAAW,YAAX,OAAOxD,EAAe,CAAC,GAAG,CAAC2B,EAAE3B,IAAI,CAAC,MAAM0B,EAAE,CAACQ,EAAER,EAAE,CAAC,MAAM,CAAC,IAAMK,EAAE,AAAW,UAAX,OAAO/B,EAAaA,EAAE,CAAC,wBAAwB,EAAErB,EAAE,aAAa,CAAC,CAAOsD,EAAEjC,aAAaqD,MAAMrD,EAAE,IAAIoD,EAAarB,EAAwB,aAAlB,OAAOL,EAAE,MAAM,EAAeA,EAAE,MAAM,GAAGQ,EAAED,EAAE,EAAGtD,GAAGoD,EAAEL,EAAE,IAAI,CAACC,EAAEO,GAAI,KAAKuB,aAAaxB,EAAE,EAAG,EAAIP,CAAAA,EAAE,OAAO,CAAC4B,EAAS5B,EAAE,OAAO,CAAC,OAAU,CAAC4B,EAAS5B,EAAE,OAAO,CAAC,YAAY,CAAC0B,CAAY,CAAC,EAAMzE,EAAE,CAAC,EAAE,SAASkD,EAAoB7B,CAAC,EAAE,IAAI+B,EAAEpD,CAAC,CAACqB,EAAE,CAAC,GAAG+B,AAAIO,KAAAA,IAAJP,EAAe,OAAOA,EAAE,OAAO,CAAC,IAAIJ,EAAEhD,CAAC,CAACqB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAMkC,EAAE,GAAK,GAAG,CAACR,CAAC,CAAC1B,EAAE,CAAC2B,EAAEA,EAAE,OAAO,CAACE,GAAqBK,EAAE,EAAK,QAAQ,CAAIA,GAAE,OAAOvD,CAAC,CAACqB,EAAE,CAAC,OAAO2B,EAAE,OAAO,CAA6CE,EAAoB,EAAE,CAACC,UAAU,IAAI,IAAI9B,EAAE,CAAC,EAAE,AAAC,MAAa3D,OAAO,cAAc,CAAvB2D,EAA0B,aAAa,CAAC,MAAM,EAAI,GAAG,IAAMrB,EAAEkD,EAAoB,KAAWE,EAAEF,EAAoB,KAAWF,EAAEE,EAAoB,KAAW6B,EAAM,KAAK,EAAQxB,EAAE,IAAIH,EAAE,YAAY,AAAszIL,CAA3/I1B,EAA6/I,OAAU,CAAj0I,cAAqBrB,EAAE,YAAY+C,CAAC,CAAC,CAAC,IAAI/C,EAAEqB,EAAE+B,EAAEG,EAAwQ,GAAtQ,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,aAAa,CAACwB,EAAM,IAAI,CAAC,YAAY,CAACA,EAAuJ,CAAE,CAAuB,UAAvB,MAAOhC,AAA1JA,CAAAA,EAAErF,OAAO,MAAM,CAAC,CAAC,0BAA0B,GAAM,YAAYkH,IAAS,SAAS,EAAE,YAAYA,IAAS,UAAU,GAAK,WAAW5B,EAAE,OAAO,EAAED,EAAC,EAAgB,WAAW,EAAaA,EAAE,WAAW,EAAE,GAAI,MAAM,AAAIM,UAAU,CAAC,6DAA6D,EAAE,AAA+D,OAA9DhC,CAAAA,EAAE,AAAoB,OAAnBrB,CAAAA,EAAE+C,EAAE,WAAW,AAAD,GAAW/C,AAAI,KAAK,IAATA,EAAW,KAAK,EAAEA,EAAE,QAAQ,EAAC,GAAWqB,AAAI,KAAK,IAATA,EAAWA,EAAE,GAAG,IAAI,EAAE,OAAO0B,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAGA,AAAaY,KAAAA,IAAbZ,EAAE,QAAQ,EAAc,CAAE7C,CAAAA,OAAO,QAAQ,CAAC6C,EAAE,QAAQ,GAAGA,EAAE,QAAQ,EAAE,GAAI,MAAM,AAAIM,UAAU,CAAC,wDAAwD,EAAE,AAA4D,OAA3DE,CAAAA,EAAE,AAAiB,OAAhBH,CAAAA,EAAEL,EAAE,QAAQ,AAAD,GAAWK,AAAI,KAAK,IAATA,EAAW,KAAK,EAAEA,EAAE,QAAQ,EAAC,GAAWG,AAAI,KAAK,IAATA,EAAWA,EAAE,GAAG,IAAI,EAAE,OAAOR,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAE,KAAI,CAAC,0BAA0B,CAACA,EAAE,yBAAyB,CAAC,IAAI,CAAC,kBAAkB,CAACA,EAAE,WAAW,GAAG6B,KAAU7B,AAAa,IAAbA,EAAE,QAAQ,CAAK,IAAI,CAAC,YAAY,CAACA,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAACA,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAIA,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAACA,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAACA,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAACA,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,CAACA,AAAmB,KAAnBA,EAAE,cAAc,CAAQ,IAAI,CAAC,SAAS,CAACA,AAAc,KAAdA,EAAE,SAAS,AAAQ,CAAC,IAAI,2BAA2B,CAAC,OAAO,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,6BAA6B,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAACgC,EAA8B,IAArB,IAAI,CAAC,aAAa,GAAM,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAACA,EAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,UAAU,CAACpB,KAAAA,CAAS,CAAC,mBAAmB,CAAC,IAAMZ,EAAE5E,KAAK,GAAG,GAAG,GAAG,AAAmBwF,KAAAA,IAAnB,IAAI,CAAC,WAAW,CAAa,CAAC,IAAM3D,EAAE,IAAI,CAAC,YAAY,CAAC+C,EAAE,IAAG/C,CAAAA,EAAE,GAAgL,OAA1E2D,KAAAA,IAAlB,IAAI,CAAC,UAAU,EAAc,KAAI,CAAC,UAAU,CAACkB,WAAY,KAAK,IAAI,CAAC,iBAAiB,EAAE,EAAG7E,EAAC,EAAS,EAApL,KAAI,CAAC,cAAc,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,aAAa,CAAC,CAAkH,CAAC,MAAO,EAAK,CAAC,oBAAoB,CAAC,GAAG,AAAmB,IAAnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAA8G,OAArG,IAAI,CAAC,WAAW,EAAEgF,cAAc,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAACrB,KAAAA,EAAU,IAAI,CAAC,gBAAgB,GAAU,GAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAMZ,EAAE,CAAC,IAAI,CAAC,iBAAiB,GAAG,GAAG,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC,IAAM/C,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,SAAG,EAAIA,IAAgB,IAAI,CAAC,IAAI,CAAC,UAAUA,IAAO+C,GAAG,IAAI,CAAC,2BAA2B,GAAU,GAAI,CAAC,CAAC,MAAO,EAAK,CAAC,6BAA6B,EAAI,IAAI,CAAC,kBAAkB,EAAE,AAAmBY,KAAAA,IAAnB,IAAI,CAAC,WAAW,GAAqB,IAAI,CAAC,WAAW,CAACsB,YAAa,KAAK,IAAI,CAAC,WAAW,EAAE,EAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC9G,KAAK,GAAG,GAAG,IAAI,CAAC,SAAS,EAAC,aAAa,CAA0B,IAAtB,IAAI,CAAC,cAAc,EAAM,AAAqB,IAArB,IAAI,CAAC,aAAa,EAAM,IAAI,CAAC,WAAW,GAAE6G,cAAc,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAACrB,KAAAA,GAAU,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,eAAe,CAAC,KAAM,IAAI,CAAC,kBAAkB,KAAK,CAAC,IAAI,aAAa,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,YAAYZ,CAAC,CAAC,CAAC,GAAG,CAAE,CAAW,UAAX,OAAOA,GAAcA,GAAG,GAAI,MAAM,AAAIM,UAAU,CAAC,6DAA6D,EAAEN,EAAE,IAAI,EAAE,OAAOA,EAAE,CAAC,CAAC,CAAE,KAAI,CAAC,YAAY,CAACA,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,IAAIA,CAAC,CAAC/C,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAIwE,QAAS,CAACnD,EAAE2B,KAAK,IAAMkC,EAAI,UAAU,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,IAAM5B,EAAE,AAAgBK,KAAAA,IAAhB,IAAI,CAAC,QAAQ,EAAc3D,AAAY2D,KAAAA,IAAZ3D,EAAE,OAAO,CAAa+C,IAAIK,EAAE,OAAO,CAACoB,QAAQ,OAAO,CAACzB,KAAK/C,AAAY2D,KAAAA,IAAZ3D,EAAE,OAAO,CAAa,IAAI,CAAC,QAAQ,CAACA,EAAE,OAAO,CAAE,KAAQA,CAAAA,AAAmB2D,KAAAA,IAAnB3D,EAAE,cAAc,CAAa,IAAI,CAAC,eAAe,CAACA,EAAE,cAAc,AAAD,GAAGgD,EAAEO,EAAmB,GAAIlC,EAAE,MAAMiC,EAAE,CAAC,MAAMP,EAAE,CAACC,EAAED,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAACmC,EAAIlF,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAG,CAAC,MAAM,OAAO+C,CAAC,CAAC/C,CAAC,CAAC,CAAC,OAAOwE,QAAQ,GAAG,CAACzB,EAAE,GAAG,CAAE,MAAMA,GAAG,IAAI,CAAC,GAAG,CAACA,EAAE/C,IAAK,CAAC,OAAO,QAAK,IAAI,CAAC,SAAS,GAAc,IAAI,CAAC,SAAS,CAAC,GAAM,IAAI,CAAC,aAAa,IAA5C,IAAI,AAAsD,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,SAAS,CAAC,GAAG,AAAmB,IAAnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAa,OAAO,IAAIwE,QAASzB,IAAI,IAAM/C,EAAE,IAAI,CAAC,aAAa,AAAC,KAAI,CAAC,aAAa,CAAC,KAAKA,IAAI+C,GAAG,CAAC,EAAG,CAAC,MAAM,QAAQ,CAAC,GAAG,AAAqB,IAArB,IAAI,CAAC,aAAa,EAAM,AAAmB,IAAnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAa,OAAO,IAAIyB,QAASzB,IAAI,IAAM/C,EAAE,IAAI,CAAC,YAAY,AAAC,KAAI,CAAC,YAAY,CAAC,KAAKA,IAAI+C,GAAG,CAAC,EAAG,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAOA,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAACA,GAAG,MAAM,CAAC,IAAI,SAAS,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQA,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAACA,CAAC,CAAC,CAAoB,KAAKrC,EAAO,OAAO,CAACW,CAAC,I,2FCYzrT,AAAC,WAYC,SAAS8D,EAAcC,CAAa,SAClC,AAAI,OAASA,GAAiB,UAAa,OAAOA,EACzC,KAIF,YAAe,MAHtBA,CAAAA,EACE,AAACC,GAAyBD,CAAa,CAACC,EAAsB,EAC9DD,CAAa,CAAC,aAAa,AAAD,EACiBA,EAAgB,IAC/D,CACA,SAASE,EAASC,CAAc,CAAEC,CAAU,EAK1C,IAAIC,EAAaF,AAJjBA,CAAAA,EACE,AAAEA,CAAAA,EAAiBA,EAAe,WAAW,AAAD,GACzCA,CAAAA,EAAe,WAAW,EAAIA,EAAe,IAAI,AAAD,GACnD,YAAW,EACqB,IAAMC,CACxCE,CAAAA,CAAuC,CAACD,EAAW,EAChDE,CAAAA,QAAQ,KAAK,CACZ,wPACAH,EACAD,GAEDG,CAAuC,CAACD,EAAW,CAAG,CAAC,CAAC,CAC7D,CACA,SAASG,EAAUC,CAAK,CAAEC,CAAO,CAAEC,CAAO,EACxC,IAAI,CAAC,KAAK,CAAGF,EACb,IAAI,CAAC,OAAO,CAAGC,EACf,IAAI,CAAC,IAAI,CAAGE,EACZ,IAAI,CAAC,OAAO,CAAGD,GAAWE,CAC5B,CACA,SAASC,IAAkB,CAC3B,SAASC,EAAcN,CAAK,CAAEC,CAAO,CAAEC,CAAO,EAC5C,IAAI,CAAC,KAAK,CAAGF,EACb,IAAI,CAAC,OAAO,CAAGC,EACf,IAAI,CAAC,IAAI,CAAGE,EACZ,IAAI,CAAC,OAAO,CAAGD,GAAWE,CAC5B,CAIA,SAASG,EAAuBtH,CAAK,EACnC,GAAI,CAEF,IAAIuH,EAA2B,CAAC,CAClC,CAAE,MAAOtD,EAAG,CACVsD,EAA2B,CAAC,CAC9B,CACA,GAAIA,EAA0B,CAE5B,IAAIC,EAAwBD,AAD5BA,CAAAA,EAA2BV,OAAM,EACoB,KAAK,CACtDY,EACF,AAAC,YAAe,OAAOtF,QACrBA,OAAO,WAAW,EAClBnC,CAAK,CAACmC,OAAO,WAAW,CAAC,EAC3BnC,EAAM,WAAW,CAAC,IAAI,EACtB,SAMF,OALAwH,EAAsB,IAAI,CACxBD,EACA,2GACAE,GArBG,GAuBqBzH,CAC5B,CACF,CACA,SAAS0H,EAAyBC,CAAI,EACpC,GAAI,MAAQA,EAAM,OAAO,KACzB,GAAI,YAAe,OAAOA,EACxB,OAAOA,EAAK,QAAQ,GAAKC,GACrB,KACAD,EAAK,WAAW,EAAIA,EAAK,IAAI,EAAI,KACvC,GAAI,UAAa,OAAOA,EAAM,OAAOA,EACrC,OAAQA,GACN,KAAKE,EACH,MAAO,UACT,MAAKC,EACH,MAAO,QACT,MAAKC,EACH,MAAO,UACT,MAAKC,EACH,MAAO,YACT,MAAKC,EACH,MAAO,UACT,MAAKC,EACH,MAAO,cACX,CACA,GAAI,UAAa,OAAOP,EACtB,OACG,UAAa,OAAOA,EAAK,GAAG,EAC3Bd,QAAQ,KAAK,CACX,qHAEJc,EAAK,QAAQ,EAEb,KAAKQ,EACH,MAAO,AAACR,CAAAA,EAAK,WAAW,EAAI,SAAQ,EAAK,WAC3C,MAAKS,EACH,MAAO,AAACT,CAAAA,EAAK,QAAQ,CAAC,WAAW,EAAI,SAAQ,EAAK,WACpD,MAAKU,EACH,IAAIC,EAAYX,EAAK,MAAM,CAK3B,MAHAA,AADAA,CAAAA,EAAOA,EAAK,WAAW,AAAD,GAEnB,CACAA,EAAO,KADNA,CAAAA,EAAOW,EAAU,WAAW,EAAIA,EAAU,IAAI,EAAI,EAAC,EAC/B,cAAgBX,EAAO,IAAM,YAAY,EAC1DA,CACT,MAAKY,EACH,OACE,AACA,OADCD,CAAAA,EAAYX,EAAK,WAAW,EAAI,IAAG,EAEhCW,EACAZ,EAAyBC,EAAK,IAAI,GAAK,MAE/C,MAAKa,EACHF,EAAYX,EAAK,QAAQ,CACzBA,EAAOA,EAAK,KAAK,CACjB,GAAI,CACF,OAAOD,EAAyBC,EAAKW,GACvC,CAAE,MAAOG,EAAG,CAAC,CACjB,CACF,OAAO,IACT,CACA,SAASC,EAAmBf,CAAI,EAC9B,MAAO,UAAa,OAAOA,GACzB,YAAe,OAAOA,GACtBA,IAASE,GACTF,IAASI,GACTJ,IAASK,GACTL,IAASM,GACTN,IAASO,GACTP,IAASgB,GACR,UAAa,OAAOhB,GACnB,OAASA,GACRA,CAAAA,EAAK,QAAQ,GAAKa,GACjBb,EAAK,QAAQ,GAAKY,GAClBZ,EAAK,QAAQ,GAAKQ,GAClBR,EAAK,QAAQ,GAAKS,GAClBT,EAAK,QAAQ,GAAKU,GAClBV,EAAK,QAAQ,GAAKiB,IAClB,KAAK,IAAMjB,EAAK,WAAW,AAAD,CAGlC,CACA,SAASkB,IAAe,CA+CxB,SAASC,EAA8BzI,CAAI,EACzC,GAAI,KAAK,IAAM0I,GACb,GAAI,CACF,MAAMnD,OACR,CAAE,MAAO6C,EAAG,CACV,IAAIO,EAAQP,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,gBACjCM,GAAS,AAACC,GAASA,CAAK,CAAC,EAAE,EAAK,GAChCC,GACE,GAAKR,EAAE,KAAK,CAAC,OAAO,CAAC,YACjB,iBACA,GAAKA,EAAE,KAAK,CAAC,OAAO,CAAC,KACnB,eACA,EACV,CACF,MAAO,KAAOM,GAAS1I,EAAO4I,EAChC,CACA,SAASC,EAA6BC,CAAE,CAAEC,CAAS,EACjD,GAAI,CAACD,GAAME,GAAS,MAAO,GAC3B,IAAIC,EAAQC,GAAoB,GAAG,CAACJ,GACpC,GAAI,KAAK,IAAMG,EAAO,OAAOA,EAC7BD,GAAU,CAAC,EACXC,EAAQ1D,MAAM,iBAAiB,CAC/BA,MAAM,iBAAiB,CAAG,KAAK,EAC/B,IAAI4D,EAAqB,KACzBA,EAAqBC,GAAqB,CAAC,CAC3CA,GAAqB,CAAC,CAAG,KACzBC,AAxEF,WACE,GAAI,IAAMC,GAAe,CACvBC,EAAU/C,QAAQ,GAAG,CACrBgD,EAAWhD,QAAQ,IAAI,CACvBiD,EAAWjD,QAAQ,IAAI,CACvBkD,GAAYlD,QAAQ,KAAK,CACzBmD,GAAYnD,QAAQ,KAAK,CACzBoD,GAAqBpD,QAAQ,cAAc,CAC3CqD,GAAerD,QAAQ,QAAQ,CAC/B,IAAIE,EAAQ,CACV,aAAc,CAAC,EACf,WAAY,CAAC,EACb,MAAO8B,EACP,SAAU,CAAC,CACb,EACAjK,OAAO,gBAAgB,CAACiI,QAAS,CAC/B,KAAME,EACN,IAAKA,EACL,KAAMA,EACN,MAAOA,EACP,MAAOA,EACP,eAAgBA,EAChB,SAAUA,CACZ,EACF,CACA4C,IACF,IA+CE,GAAI,CACF,IAAIQ,EAAiB,CACnB,4BAA6B,WAC3B,GAAI,CACF,GAAIf,EAAW,CACb,IAAIgB,EAAO,WACT,MAAMxE,OACR,EAMA,GALAhH,OAAO,cAAc,CAACwL,EAAK,SAAS,CAAE,QAAS,CAC7C,IAAK,WACH,MAAMxE,OACR,CACF,GACI,UAAa,OAAOyE,SAAWA,QAAQ,SAAS,CAAE,CACpD,GAAI,CACFA,QAAQ,SAAS,CAACD,EAAM,EAAE,CAC5B,CAAE,MAAO3B,EAAG,CACV,IAAI6B,EAAU7B,CAChB,CACA4B,QAAQ,SAAS,CAAClB,EAAI,EAAE,CAAEiB,EAC5B,KAAO,CACL,GAAI,CACFA,EAAK,IAAI,EACX,CAAE,MAAOG,EAAK,CACZD,EAAUC,CACZ,CACApB,EAAG,IAAI,CAACiB,EAAK,SAAS,CACxB,CACF,KAAO,CACL,GAAI,CACF,MAAMxE,OACR,CAAE,MAAO4E,EAAK,CACZF,EAAUE,CACZ,CACA,AAACJ,CAAAA,EAAOjB,GAAG,GACT,YAAe,OAAOiB,EAAK,KAAK,EAChCA,EAAK,KAAK,CAAC,WAAa,EAC5B,CACF,CAAE,MAAOK,EAAQ,CACf,GAAIA,GAAUH,GAAW,UAAa,OAAOG,EAAO,KAAK,CACvD,MAAO,CAACA,EAAO,KAAK,CAAEH,EAAQ,KAAK,CAAC,AACxC,CACA,MAAO,CAAC,KAAM,KAAK,AACrB,CACF,CACAH,CAAAA,EAAe,2BAA2B,CAAC,WAAW,CACpD,8BACF,IAAIO,EAAqB9L,OAAO,wBAAwB,CACtDuL,EAAe,2BAA2B,CAC1C,OAEFO,CAAAA,GACEA,EAAmB,YAAY,EAC/B9L,OAAO,cAAc,CACnBuL,EAAe,2BAA2B,CAC1C,OACA,CAAE,MAAO,6BAA8B,GAE3C,IAAIQ,EACAR,EAAe,2BAA2B,GAC5CS,EAAcD,CAAqB,CAAC,EAAE,CACtCE,EAAeF,CAAqB,CAAC,EAAE,CACzC,GAAIC,GAAeC,EAAc,CAC/B,IAAIC,EAAcF,EAAY,KAAK,CAAC,MAClCG,EAAeF,EAAa,KAAK,CAAC,MACpC,IACEF,EAAwBD,EAAqB,EAC7CA,EAAqBI,EAAY,MAAM,EACvC,CAACA,CAAW,CAACJ,EAAmB,CAAC,QAAQ,CACvC,gCAIFA,IACF,KAEEC,EAAwBI,EAAa,MAAM,EAC3C,CAACA,CAAY,CAACJ,EAAsB,CAAC,QAAQ,CAC3C,gCAIFA,IACF,GACED,IAAuBI,EAAY,MAAM,EACzCH,IAA0BI,EAAa,MAAM,CAE7C,IACEL,EAAqBI,EAAY,MAAM,CAAG,EACxCH,EAAwBI,EAAa,MAAM,CAAG,EAChD,GAAKL,GACL,GAAKC,GACLG,CAAW,CAACJ,EAAmB,GAC7BK,CAAY,CAACJ,EAAsB,EAGrCA,IACJ,KAEE,GAAKD,GAAsB,GAAKC,EAChCD,IAAsBC,IAEtB,GACEG,CAAW,CAACJ,EAAmB,GAC/BK,CAAY,CAACJ,EAAsB,CACnC,CACA,GAAI,IAAMD,GAAsB,IAAMC,EACpC,GACE,GACGD,IACDC,IACA,EAAIA,GACFG,CAAW,CAACJ,EAAmB,GAC7BK,CAAY,CAACJ,EAAsB,CACvC,CACA,IAAIK,EACF,KACAF,CAAW,CAACJ,EAAmB,CAAC,OAAO,CACrC,WACA,QAOJ,OALAvB,EAAG,WAAW,EACZ6B,EAAO,QAAQ,CAAC,gBACfA,CAAAA,EAASA,EAAO,OAAO,CAAC,cAAe7B,EAAG,WAAW,GACxD,YAAe,OAAOA,GACpBI,GAAoB,GAAG,CAACJ,EAAI6B,GACvBA,CACT,OACK,GAAKN,GAAsB,GAAKC,EAAuB,CAEhE,KACF,CACJ,CACF,QAAU,CACR,AAACtB,GAAU,CAAC,EACTI,GAAqB,CAAC,CAAGD,EAC1ByB,AAtLN,WAEE,GAAI,KAAMtB,GAAe,CACvB,IAAI5C,EAAQ,CAAE,aAAc,CAAC,EAAG,WAAY,CAAC,EAAG,SAAU,CAAC,CAAE,EAC7DnI,OAAO,gBAAgB,CAACiI,QAAS,CAC/B,IAAKqE,EAAO,CAAC,EAAGnE,EAAO,CAAE,MAAO6C,CAAQ,GACxC,KAAMsB,EAAO,CAAC,EAAGnE,EAAO,CAAE,MAAO8C,CAAS,GAC1C,KAAMqB,EAAO,CAAC,EAAGnE,EAAO,CAAE,MAAO+C,CAAS,GAC1C,MAAOoB,EAAO,CAAC,EAAGnE,EAAO,CAAE,MAAOgD,EAAU,GAC5C,MAAOmB,EAAO,CAAC,EAAGnE,EAAO,CAAE,MAAOiD,EAAU,GAC5C,eAAgBkB,EAAO,CAAC,EAAGnE,EAAO,CAAE,MAAOkD,EAAmB,GAC9D,SAAUiB,EAAO,CAAC,EAAGnE,EAAO,CAAE,MAAOmD,EAAa,EACpD,EACF,CACA,EAAIP,IACF9C,QAAQ,KAAK,CACX,+EAEN,IAqKOjB,MAAM,iBAAiB,CAAG0D,CAC/B,CAKA,OAJAwB,EAAc,AAACA,CAAAA,EAAc3B,EAAKA,EAAG,WAAW,EAAIA,EAAG,IAAI,CAAG,EAAC,EAC3DL,EAA8BgC,GAC9B,GACJ,YAAe,OAAO3B,GAAMI,GAAoB,GAAG,CAACJ,EAAI2B,GACjDA,CACT,CAgCA,SAASK,IACP,IAAIC,EAAa3B,GAAqB,CAAC,CACvC,OAAO,OAAS2B,EAAa,KAAOA,EAAW,QAAQ,EACzD,CACA,SAASC,EAAYC,CAAM,EACzB,GAAIC,GAAe,IAAI,CAACD,EAAQ,OAAQ,CACtC,IAAIE,EAAS5M,OAAO,wBAAwB,CAAC0M,EAAQ,OAAO,GAAG,CAC/D,GAAIE,GAAUA,EAAO,cAAc,CAAE,MAAO,CAAC,CAC/C,CACA,OAAO,KAAK,IAAMF,EAAO,GAAG,AAC9B,CAgBA,SAASG,IACP,IAAIC,EAAgBhE,EAAyB,IAAI,CAAC,IAAI,EAOtD,OANAiE,EAAsB,CAACD,EAAc,EAClC,CAACC,EAAsB,CAACD,EAAc,CAAG,CAAC,EAC3C7E,QAAQ,KAAK,CACX,8IACF,EAEK,KAAK,IADZ6E,CAAAA,EAAgB,IAAI,CAAC,KAAK,CAAC,GAAG,AAAD,EACKA,EAAgB,IACpD,CACA,SAASE,EAAajE,CAAI,CAAE5H,CAAG,CAAE8L,CAAI,CAAEC,CAAM,CAAEC,CAAK,CAAEhF,CAAK,EA6BzD,OA5BA8E,EAAO9E,EAAM,GAAG,CAChBY,EAAO,CACL,SAAUqE,EACV,KAAMrE,EACN,IAAK5H,EACL,MAAOgH,EACP,OAAQgF,CACV,EACA,OAAU,MAAK,IAAMF,EAAOA,EAAO,IAAG,EAClCjN,OAAO,cAAc,CAAC+I,EAAM,MAAO,CACjC,WAAY,CAAC,EACb,IAAK8D,CACP,GACA7M,OAAO,cAAc,CAAC+I,EAAM,MAAO,CAAE,WAAY,CAAC,EAAG,MAAO,IAAK,GACrEA,EAAK,MAAM,CAAG,CAAC,EACf/I,OAAO,cAAc,CAAC+I,EAAK,MAAM,CAAE,YAAa,CAC9C,aAAc,CAAC,EACf,WAAY,CAAC,EACb,SAAU,CAAC,EACX,MAAO,CACT,GACA/I,OAAO,cAAc,CAAC+I,EAAM,aAAc,CACxC,aAAc,CAAC,EACf,WAAY,CAAC,EACb,SAAU,CAAC,EACX,MAAO,IACT,GACA/I,OAAO,MAAM,EAAKA,CAAAA,OAAO,MAAM,CAAC+I,EAAK,KAAK,EAAG/I,OAAO,MAAM,CAAC+I,EAAI,EACxDA,CACT,CAaA,SAASsE,EAAkBC,CAAI,CAAEC,CAAU,EACzC,GACE,UAAa,OAAOD,GACpBA,GACAA,EAAK,QAAQ,GAAKE,IAElB,GAAIC,GAAYH,GACd,IAAK,IAAIhI,EAAI,EAAGA,EAAIgI,EAAK,MAAM,CAAEhI,IAAK,CACpC,IAAIoI,EAAQJ,CAAI,CAAChI,EAAE,AACnBqI,CAAAA,EAAeD,IAAUE,EAAoBF,EAAOH,EACtD,MACG,GAAII,EAAeL,GACtBA,EAAK,MAAM,EAAKA,CAAAA,EAAK,MAAM,CAAC,SAAS,CAAG,QACrC,GACF,AACD,YAAe,MADbhI,CAAAA,EAAImC,EAAc6F,EAAI,GAEtBhI,IAAMgI,EAAK,OAAO,EACjB,AAAChI,CAAAA,EAAIA,EAAE,IAAI,CAACgI,EAAI,IAAUA,EAE7B,KAAO,CAAC,AAACA,CAAAA,EAAOhI,EAAE,IAAI,EAAC,EAAG,IAAI,EAC5BqI,EAAeL,EAAK,KAAK,GACvBM,EAAoBN,EAAK,KAAK,CAAEC,GAC1C,CACA,SAASI,EAAeE,CAAM,EAC5B,MACE,UAAa,OAAOA,GACpB,OAASA,GACTA,EAAO,QAAQ,GAAKT,CAExB,CACA,SAASQ,EAAoBE,CAAO,CAAEP,CAAU,EAC9C,GACEO,EAAQ,MAAM,EACd,CAACA,EAAQ,MAAM,CAAC,SAAS,EACzB,MAAQA,EAAQ,GAAG,EAClB,CAACA,EAAQ,MAAM,CAAC,SAAS,CAAG,EAE7B,CAACC,EAAqB,CA2BYR,EA5BSA,EA6BzCS,EAAO,GAEXb,CADEA,EAAQZ,MAEPY,CAAAA,EAAQrE,EAAyBqE,EAAM,IAAI,IAC3Ca,CAAAA,EAAO,mCAAqCb,EAAQ,IAAG,EAC1Da,GACG,AAACT,CAAAA,EAAazE,EAAyByE,EAAU,GAC/CS,CAAAA,EACC,8CAAgDT,EAAa,IAAG,EArCnEA,EAsCIS,EArC6B,AAAD,EACjC,CACAD,EAAqB,CAACR,EAAW,CAAG,CAAC,EACrC,IAwBkCA,EAChCS,EACFb,EA1BIc,EAAa,EACjBH,CAAAA,GACE,MAAQA,EAAQ,MAAM,EACtBA,EAAQ,MAAM,GAAKvB,KAClB,CAAC0B,EAAa,KACf,UAAa,OAAOH,EAAQ,MAAM,CAAC,GAAG,CACjCG,EAAanF,EAAyBgF,EAAQ,MAAM,CAAC,IAAI,EAC1D,UAAa,OAAOA,EAAQ,MAAM,CAAC,IAAI,EACtCG,CAAAA,EAAaH,EAAQ,MAAM,CAAC,IAAI,AAAD,EACnCG,EAAa,+BAAiCA,EAAa,GAAG,EACjE,IAAIC,EAAsBrD,GAAqB,eAAe,AAC9DA,CAAAA,GAAqB,eAAe,CAAG,WACrC,IAAIsD,EAAQC,AAlKlB,SAASA,EAAqCrF,CAAI,EAChD,GAAI,MAAQA,EAAM,MAAO,GACzB,GAAI,YAAe,OAAOA,EAAM,CAC9B,IAAIsF,EAAYtF,EAAK,SAAS,CAC9B,OAAOuB,EACLvB,EACA,CAAE,EAACsF,GAAa,CAACA,EAAU,gBAAgB,AAAD,EAE9C,CACA,GAAI,UAAa,OAAOtF,EAAM,OAAOmB,EAA8BnB,GACnE,OAAQA,GACN,KAAKM,EACH,OAAOa,EAA8B,WACvC,MAAKZ,EACH,OAAOY,EAA8B,eACzC,CACA,GAAI,UAAa,OAAOnB,EACtB,OAAQA,EAAK,QAAQ,EACnB,KAAKU,EACH,OAAOa,EAA6BvB,EAAK,MAAM,CAAE,CAAC,EACpD,MAAKY,EACH,OAAOyE,EAAqCrF,EAAK,IAAI,CACvD,MAAKa,EACHyE,EAAYtF,EAAK,QAAQ,CACzBA,EAAOA,EAAK,KAAK,CACjB,GAAI,CACF,OAAOqF,EAAqCrF,EAAKsF,GACnD,CAAE,MAAOxE,EAAG,CAAC,CACjB,CACF,MAAO,EACT,EAoIuDiE,EAAQ,IAAI,EAE7D,OADAI,GAAwBC,CAAAA,GAASD,KAAyB,EAAC,EACpDC,CACT,EACAlG,QAAQ,KAAK,CACX,0HACAsF,EACAU,GAEFpD,GAAqB,eAAe,CAAGqD,CACzC,CACF,CAsBA,SAASI,EAAcR,CAAO,CAAES,CAAK,MATrBpN,EACVqN,EASJ,MAAO,UAAa,OAAOV,GACzB,OAASA,GACT,MAAQA,EAAQ,GAAG,CAChBpF,CAAAA,EAAuBoF,EAAQ,GAAG,EAbzB3M,EAamC,GAAK2M,EAAQ,GAAG,CAZ7DU,EAAgB,CAAE,IAAK,KAAM,IAAK,IAAK,EAEzC,IACArN,EAAI,OAAO,CAAC,QAAS,SAAUiJ,CAAK,EAClC,OAAOoE,CAAa,CAACpE,EAAM,AAC7B,EAO+D,EAC7DmE,EAAM,QAAQ,CAAC,GACrB,CACA,SAASE,IAAU,CAiKnB,SAASC,EAAYC,CAAQ,CAAEC,CAAI,CAAExG,CAAO,EAC1C,GAAI,MAAQuG,EAAU,OAAOA,EAC7B,IAAI9K,EAAS,EAAE,CACbgL,EAAQ,EAIV,OAHAC,AAnIF,SAASA,EAAaH,CAAQ,CAAEI,CAAK,CAAEC,CAAa,CAAEC,CAAS,CAAEC,CAAQ,EACvE,IAAInG,EAAO,OAAO4F,EACd,eAAgB5F,GAAQ,YAAcA,CAAG,GAAG4F,CAAAA,EAAW,IAAG,EAC9D,IAAIQ,EAAiB,CAAC,EACtB,GAAI,OAASR,EAAUQ,EAAiB,CAAC,OAEvC,OAAQpG,GACN,IAAK,SACL,IAAK,SACL,IAAK,SACHoG,EAAiB,CAAC,EAClB,KACF,KAAK,SACH,OAAQR,EAAS,QAAQ,EACvB,KAAKvB,EACL,KAAKlE,EACHiG,EAAiB,CAAC,EAClB,KACF,MAAKvF,EACH,OACE,AACAkF,EACEK,AAFDA,CAAAA,EAAiBR,EAAS,KAAK,AAAD,EAEdA,EAAS,QAAQ,EAChCI,EACAC,EACAC,EACAC,EAGR,CACJ,CACF,GAAIC,EAAgB,CAElBD,EAAWA,EADXC,EAAiBR,GAEjB,IA5KwBS,EAAYC,EA4KhCC,EACF,KAAOL,EAAY,IAAMX,EAAca,EAAgB,GAAKF,EAmC9D,OAlCAxB,GAAYyB,GACP,CAACF,EAAgB,GAClB,MAAQM,GACLN,CAAAA,EACCM,EAAS,OAAO,CAACC,GAA4B,OAAS,GAAE,EAC5DT,EAAaI,EAAUH,EAAOC,EAAe,GAAI,SAAU1O,CAAC,EAC1D,OAAOA,CACT,EAAC,EACD,MAAQ4O,GACPvB,CAAAA,EAAeuB,IACb,OAAQA,EAAS,GAAG,EAClB,CAACC,GAAkBA,EAAe,GAAG,GAAKD,EAAS,GAAG,EACrDxG,EAAuBwG,EAAS,GAAG,GA1LrBE,EA4LhBF,EA5L4BG,EA6L5BL,EACG,OAAQE,EAAS,GAAG,EACpBC,GAAkBA,EAAe,GAAG,GAAKD,EAAS,GAAG,CAClD,GACA,AAAC,IAAKA,EAAS,GAAG,AAAD,EAAG,OAAO,CACzBK,GACA,OACE,GAAE,EACVD,EA5LZD,AARAA,CAAAA,EAASrC,EACPoC,EAAW,IAAI,CACfC,EACA,KAAK,EACL,KAAK,EACLD,EAAW,MAAM,CACjBA,EAAW,KAAK,CAClB,EACO,MAAM,CAAC,SAAS,CAAGA,EAAW,MAAM,CAAC,SAAS,CAkL5CJ,EAjLFK,EA6LC,KAAOJ,GACL,MAAQE,GACRxB,EAAewB,IACf,MAAQA,EAAe,GAAG,EAC1BA,EAAe,MAAM,EACrB,CAACA,EAAe,MAAM,CAAC,SAAS,EAC/BH,CAAAA,EAAc,MAAM,CAAC,SAAS,CAAG,GACnCE,EAAWF,CAAa,EAC3BD,EAAM,IAAI,CAACG,EAAQ,EAChB,CACT,CAGA,GAFAC,EAAiB,EACjBG,EAAW,KAAOL,EAAY,IAAMA,EAAY,IAC5CxB,GAAYkB,GACd,IAAK,IAAIrJ,EAAI,EAAGA,EAAIqJ,EAAS,MAAM,CAAErJ,IACnC,AACGyD,EAAOuG,EAAWhB,EADpBW,EAAYN,CAAQ,CAACrJ,EAAE,CACsBA,GAC3C6J,GAAkBL,EACjBG,EACAF,EACAC,EACAjG,EACAmG,QAEH,GAAK,AAA+B,YAAe,MAA7C5J,CAAAA,EAAImC,EAAckH,EAAQ,EACnC,IACErJ,IAAMqJ,EAAS,OAAO,EACnBa,CAAAA,IACCvH,QAAQ,IAAI,CACV,yFAEHuH,GAAmB,CAAC,CAAC,EACtBb,EAAWrJ,EAAE,IAAI,CAACqJ,GAClBrJ,EAAI,EACN,CAAC,AAAC2J,CAAAA,EAAYN,EAAS,IAAI,EAAC,EAAG,IAAI,EAGnC,AACG5F,EAAOuG,EAAWhB,EADpBW,EAAYA,EAAU,KAAK,CACkB3J,KAC3C6J,GAAkBL,EACjBG,EACAF,EACAC,EACAjG,EACAmG,QAEH,GAAI,WAAanG,EAAM,CAC1B,GAAI,YAAe,OAAO4F,EAAS,IAAI,CACrC,OAAOG,EACLW,AA/IR,SAAyBC,CAAQ,EAC/B,OAAQA,EAAS,MAAM,EACrB,IAAK,YACH,OAAOA,EAAS,KAAK,AACvB,KAAK,WACH,MAAMA,EAAS,MAAM,AACvB,SACE,OACG,UAAa,OAAOA,EAAS,MAAM,CAChCA,EAAS,IAAI,CAACjB,EAAQA,GACrB,CAACiB,EAAS,MAAM,CAAG,UACpBA,EAAS,IAAI,CACX,SAAUC,CAAc,EACtB,YAAcD,EAAS,MAAM,EAC1B,CAACA,EAAS,MAAM,CAAG,YACnBA,EAAS,KAAK,CAAGC,CAAc,CACpC,EACA,SAAUC,CAAK,EACb,YAAcF,EAAS,MAAM,EAC1B,CAACA,EAAS,MAAM,CAAG,WACnBA,EAAS,MAAM,CAAGE,CAAK,CAC5B,EACF,EACJF,EAAS,MAAM,EAEf,IAAK,YACH,OAAOA,EAAS,KAAK,AACvB,KAAK,WACH,MAAMA,EAAS,MAAM,AACzB,CACJ,CACA,MAAMA,CACR,EA+GwBf,GAChBI,EACAC,EACAC,EACAC,EAGJ,OAAMlI,MACJ,kDACG,qBAHL+H,CAAAA,EAAQc,OAAOlB,EAAQ,EAIf,qBAAuB3O,OAAO,IAAI,CAAC2O,GAAU,IAAI,CAAC,MAAQ,IAC1DI,CAAI,EACR,4EAEN,CACA,OAAOI,CACT,EAKeR,EAAU9K,EAAQ,GAAI,GAAI,SAAU6J,CAAK,EACpD,OAAOkB,EAAK,IAAI,CAACxG,EAASsF,EAAOmB,IACnC,GACOhL,CACT,CACA,SAASiM,EAAgBC,CAAO,EAC9B,GAAI,KAAOA,EAAQ,OAAO,CAAE,CAC1B,IAAIC,EAAOD,EAAQ,OAAO,CAE1BC,AADAA,CAAAA,EAAOA,GAAK,EACP,IAAI,CACP,SAAUC,CAAY,EAChB,KAAMF,EAAQ,OAAO,EAAI,KAAOA,EAAQ,OAAO,AAAD,GAChD,CAACA,EAAQ,OAAO,CAAG,EAAKA,EAAQ,OAAO,CAAGE,CAAY,CAC1D,EACA,SAAUL,CAAK,EACT,KAAMG,EAAQ,OAAO,EAAI,KAAOA,EAAQ,OAAO,AAAD,GAChD,CAACA,EAAQ,OAAO,CAAG,EAAKA,EAAQ,OAAO,CAAGH,CAAK,CACnD,GAEF,KAAOG,EAAQ,OAAO,EACnB,CAACA,EAAQ,OAAO,CAAG,EAAKA,EAAQ,OAAO,CAAGC,CAAI,CACnD,CACA,GAAI,IAAMD,EAAQ,OAAO,CACvB,OACE,AACA,KAAK,IADJC,CAAAA,EAAOD,EAAQ,OAAO,AAAD,GAEpB9H,QAAQ,KAAK,CACX,oOACA+H,GAEJ,YAAaA,GACX/H,QAAQ,KAAK,CACX,wKACA+H,GAEJA,EAAK,OAAO,AAEhB,OAAMD,EAAQ,OAAO,AACvB,CACA,SAASG,IACP,IAAI1D,EAAa3B,GAAqB,CAAC,CAKvC,OAJA,OAAS2B,GACPvE,QAAQ,KAAK,CACX,ibAEGuE,CACT,CACA,SAAS2D,IAAQ,CACjB,SAASC,EAAYC,CAAI,EACvB,GAAI,OAASC,GACX,GAAI,CACF,IAAIC,EAAgB,AAAC,WAAYlK,KAAK,MAAM,EAAC,EAAG,KAAK,CAAC,EAAG,GACzDiK,GAAkB,AAACtN,CAAAA,GAAUA,CAAM,CAACuN,EAAc,AAAD,EAAG,IAAI,CACtDvN,EACA,UACA,YAAY,AAChB,CAAE,MAAOwN,EAAM,CACbF,GAAkB,SAAUpB,CAAQ,EAClC,CAAC,IAAMuB,IACJ,CAACA,GAA6B,CAAC,EAChC,aAAgB,OAAOC,gBACrBzI,QAAQ,KAAK,CACX,2NACF,EACJ,IAAI0I,EAAU,IAAID,cAClBC,CAAAA,EAAQ,KAAK,CAAC,SAAS,CAAGzB,EAC1ByB,EAAQ,KAAK,CAAC,WAAW,CAAC,KAAK,EACjC,CACF,CACF,OAAOL,GAAgBD,EACzB,CACA,SAASO,EAAgBC,CAAM,EAC7B,OAAO,EAAIA,EAAO,MAAM,EAAI,YAAe,OAAOC,eAC9C,AAAIA,eAAeD,GACnBA,CAAM,CAAC,EAAE,AACf,CACA,SAASE,EAAYC,CAAY,CAAEC,CAAiB,EAClDA,IAAsBC,GAAgB,GACpCjJ,QAAQ,KAAK,CACX,oIAEJiJ,GAAgBD,CAClB,CACA,SAASE,EAA6BC,CAAW,CAAEC,CAAO,CAAEC,CAAM,EAChE,IAAIC,EAAQ1G,GAAqB,QAAQ,CACzC,GAAI,OAAS0G,GACX,GAAI,IAAMA,EAAM,MAAM,CACpB,GAAI,CACFC,EAAcD,GACdnB,EAAY,WACV,OAAOe,EAA6BC,EAAaC,EAASC,EAC5D,GACA,MACF,CAAE,MAAO1B,EAAO,CACd/E,GAAqB,YAAY,CAAC,IAAI,CAAC+E,EACzC,MACG/E,GAAqB,QAAQ,CAAG,KACvC,EAAIA,GAAqB,YAAY,CAAC,MAAM,CACvC,CAAC0G,EAAQX,EAAgB/F,GAAqB,YAAY,EAC1DA,GAAqB,YAAY,CAAC,MAAM,CAAG,EAC5CyG,EAAOC,EAAK,EACZF,EAAQD,EACd,CACA,SAASI,EAAcD,CAAK,EAC1B,GAAI,CAACE,GAAY,CACfA,GAAa,CAAC,EACd,IAAInM,EAAI,EACR,GAAI,CACF,KAAOA,EAAIiM,EAAM,MAAM,CAAEjM,IAEvB,IADA,IAAI4J,EAAWqC,CAAK,CAACjM,EAAE,GACpB,CACDuF,GAAqB,aAAa,CAAG,CAAC,EACtC,IAAI6G,EAAexC,EAAS,CAAC,GAC7B,GAAI,OAASwC,EAAc,CACzB,GAAI7G,GAAqB,aAAa,CAAE,CACtC0G,CAAK,CAACjM,EAAE,CAAG4J,EACXqC,EAAM,MAAM,CAAC,EAAGjM,GAChB,MACF,CACA4J,EAAWwC,CACb,MAAO,KACT,CAEFH,EAAM,MAAM,CAAG,CACjB,CAAE,MAAO3B,EAAO,CACd2B,EAAM,MAAM,CAAC,EAAGjM,EAAI,GAAIuF,GAAqB,YAAY,CAAC,IAAI,CAAC+E,EACjE,QAAU,CACR6B,GAAa,CAAC,CAChB,CACF,CACF,CACA,aAAgB,OAAOE,gCACrB,YACE,OAAOA,+BAA+B,2BAA2B,EACnEA,+BAA+B,2BAA2B,CAAC3K,SAC7D,IAAIoG,EAAqB7J,OAAO,GAAG,CAAC,8BAClC2F,EAAoB3F,OAAO,GAAG,CAAC,gBAC/B0F,EAAsB1F,OAAO,GAAG,CAAC,kBACjC6F,EAAyB7F,OAAO,GAAG,CAAC,qBACpC4F,EAAsB5F,OAAO,GAAG,CAAC,kBACnCA,OAAO,GAAG,CAAC,kBACX,IAAIiG,EAAsBjG,OAAO,GAAG,CAAC,kBACnCgG,EAAqBhG,OAAO,GAAG,CAAC,iBAChCkG,EAAyBlG,OAAO,GAAG,CAAC,qBACpC8F,EAAsB9F,OAAO,GAAG,CAAC,kBACjC+F,EAA2B/F,OAAO,GAAG,CAAC,uBACtCoG,EAAkBpG,OAAO,GAAG,CAAC,cAC7BqG,EAAkBrG,OAAO,GAAG,CAAC,cAC7BwG,EAAuBxG,OAAO,GAAG,CAAC,mBAClCoE,EAAwBpE,OAAO,QAAQ,CACvCyE,EAA0C,CAAC,EAC3CO,EAAuB,CACrB,UAAW,WACT,MAAO,CAAC,CACV,EACA,mBAAoB,SAAUV,CAAc,EAC1CD,EAASC,EAAgB,cAC3B,EACA,oBAAqB,SAAUA,CAAc,EAC3CD,EAASC,EAAgB,eAC3B,EACA,gBAAiB,SAAUA,CAAc,EACvCD,EAASC,EAAgB,WAC3B,CACF,EACAyE,EAAStM,OAAO,MAAM,CACtBsI,EAAc,CAAC,EACjBtI,OAAO,MAAM,CAACsI,GACdJ,EAAU,SAAS,CAAC,gBAAgB,CAAG,CAAC,EACxCA,EAAU,SAAS,CAAC,QAAQ,CAAG,SAAU0J,CAAY,CAAE1C,CAAQ,EAC7D,GACE,UAAa,OAAO0C,GACpB,YAAe,OAAOA,GACtB,MAAQA,EAER,MAAM5K,MACJ,0GAEJ,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAE4K,EAAc1C,EAAU,WAC7D,EACAhH,EAAU,SAAS,CAAC,WAAW,CAAG,SAAUgH,CAAQ,EAClD,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAEA,EAAU,cAClD,EACA,IAUE2C,EAVEC,EAAiB,CACjB,UAAW,CACT,YACA,qHACD,CACD,aAAc,CACZ,eACA,kGACD,AACH,EAEF,IAAKD,KAAUC,EACbA,EAAe,cAAc,CAACD,IAC5BE,AAp6BJ,SAAkCC,CAAU,CAAEhE,CAAI,EAChDhO,OAAO,cAAc,CAACkI,EAAU,SAAS,CAAE8J,EAAY,CACrD,IAAK,WACH/J,QAAQ,IAAI,CACV,8DACA+F,CAAI,CAAC,EAAE,CACPA,CAAI,CAAC,EAAE,CAEX,CACF,EACF,EA05B6B6D,EAAQC,CAAc,CAACD,EAAO,CAC3DrJ,CAAAA,EAAe,SAAS,CAAGN,EAAU,SAAS,CAE9C4J,AADAA,CAAAA,EAAiBrJ,EAAc,SAAS,CAAG,IAAID,CAAe,EAC/C,WAAW,CAAGC,EAC7B6D,EAAOwF,EAAgB5J,EAAU,SAAS,EAC1C4J,EAAe,oBAAoB,CAAG,CAAC,EACvC,IAkBE9G,EACAC,EACAC,EACAC,GACAC,GACAC,GACAC,GAxBEmC,GAAchK,MAAM,OAAO,CAC7BuF,GAA2BzF,OAAO,GAAG,CAAC,0BACtCsH,GAAuB,CACrB,EAAG,KACH,EAAG,KACH,EAAG,KACH,EAAG,KACH,EAAG,KACH,SAAU,KACV,iBAAkB,CAAC,EACnB,wBAAyB,CAAC,EAC1B,cAAe,CAAC,EAChB,aAAc,EAAE,CAChB,gBAAiB,IACnB,EACA8B,GAAiB3M,OAAO,SAAS,CAAC,cAAc,CAChDgK,GAA2BzG,OAAO,GAAG,CAAC,0BACtCwH,GAAgB,CAQlBd,CAAAA,EAAY,kBAAkB,CAAG,CAAC,EAClC,IAAIE,GACFE,GAMA4H,GACAC,GANAzH,GAAU,CAAC,EACTE,GAAsB,GACxB,aAAe,OAAOwH,QAAUA,QAAUnR,GAAE,EAE1CwM,GAAyBjK,OAAO,GAAG,CAAC,0BAGpCwJ,GAAyB,CAAC,EAC1BgB,GAAwB,CAAC,EAC3ByB,GAAmB,CAAC,EACpBD,GAA6B,OAC7B6C,GACE,YAAe,OAAOC,YAClBA,YACA,SAAUzC,CAAK,EAiBN,GACL,UAAa,OAAO0C,SACpB,YAAe,OAAOA,QAAQ,IAAI,CAClC,CACAA,QAAQ,IAAI,CAAC,oBAAqB1C,GAClC,MACF,CACA3H,QAAQ,KAAK,CAAC2H,EAChB,EACNa,GAA6B,CAAC,EAC9BH,GAAkB,KAClBY,GAAgB,EAChBqB,GAAoB,CAAC,EACrBd,GAAa,CAAC,EACde,GACE,YAAe,OAAOC,eAClB,SAAUvD,CAAQ,EAChBuD,eAAe,WACb,OAAOA,eAAevD,EACxB,EACF,EACAkB,EACR0B,EAAiB9R,OAAO,MAAM,CAAC,CAC7B,UAAW,KACX,EAAG,SAAU0S,CAAI,EACf,OAAOxC,IAAoB,YAAY,CAACwC,EAC1C,CACF,GACAC,EAAQ,QAAQ,CAAG,CACjB,IAAKjE,EACL,QAAS,SAAUC,CAAQ,CAAEiE,CAAW,CAAEC,CAAc,EACtDnE,EACEC,EACA,WACEiE,EAAY,KAAK,CAAC,IAAI,CAAE/L,UAC1B,EACAgM,EAEJ,EACA,MAAO,SAAUlE,CAAQ,EACvB,IAAIhL,EAAI,EAIR,OAHA+K,EAAYC,EAAU,WACpBhL,GACF,GACOA,CACT,EACA,QAAS,SAAUgL,CAAQ,EACzB,OACED,EAAYC,EAAU,SAAUjB,CAAK,EACnC,OAAOA,CACT,IAAM,EAAE,AAEZ,EACA,KAAM,SAAUiB,CAAQ,EACtB,GAAI,CAAChB,EAAegB,GAClB,MAAM3H,MACJ,yEAEJ,OAAO2H,CACT,CACF,EACAgE,EAAQ,SAAS,CAAGzK,EACpByK,EAAQ,QAAQ,CAAG1J,EACnB0J,EAAQ,QAAQ,CAAGxJ,EACnBwJ,EAAQ,aAAa,CAAGlK,EACxBkK,EAAQ,UAAU,CAAGvJ,EACrBuJ,EAAQ,QAAQ,CAAGtJ,EACnBsJ,EAAQ,+DAA+D,CACrE9H,GACF8H,EAAQ,kBAAkB,CAAGb,EAC7Ba,EAAQ,GAAG,CAAG,SAAUzD,CAAQ,EAC9B,IAAI8B,EAAenG,GAAqB,QAAQ,CAC9CoG,EAAoBC,EACtBA,CAAAA,KACA,IAAIK,EAAS1G,GAAqB,QAAQ,CACtC,OAASmG,EAAeA,EAAe,EAAE,CAC3C8B,EAAkB,CAAC,EACrB,GAAI,CACF,IAAIjP,EAASqL,GACf,CAAE,MAAOU,EAAO,CACd/E,GAAqB,YAAY,CAAC,IAAI,CAAC+E,EACzC,CACA,GAAI,EAAI/E,GAAqB,YAAY,CAAC,MAAM,CAC9C,MACGkG,EAAYC,EAAcC,GAC1B/B,EAAW0B,EAAgB/F,GAAqB,YAAY,EAC5DA,GAAqB,YAAY,CAAC,MAAM,CAAG,EAC5CqE,EAEJ,GACE,OAASrL,GACT,UAAa,OAAOA,GACpB,YAAe,OAAOA,EAAO,IAAI,CACjC,CACA,IAAI6L,EAAW7L,EASf,OARA2O,GAAuB,WACrBM,GACEP,IACC,CAACA,GAAoB,CAAC,EACvBtK,QAAQ,KAAK,CACX,oMACF,CACJ,GACO,CACL,KAAM,SAAUoJ,CAAO,CAAEC,CAAM,EAC7BwB,EAAkB,CAAC,EACnBpD,EAAS,IAAI,CACX,SAAU0B,CAAW,EAEnB,GADAL,EAAYC,EAAcC,GACtB,IAAMA,EAAmB,CAC3B,GAAI,CACFO,EAAcD,GACZnB,EAAY,WACV,OAAOe,EACLC,EACAC,EACAC,EAEJ,EACJ,CAAE,MAAOyB,EAAS,CAChBlI,GAAqB,YAAY,CAAC,IAAI,CAACkI,EACzC,CACA,GAAI,EAAIlI,GAAqB,YAAY,CAAC,MAAM,CAAE,CAChD,IAAImI,EAAepC,EACjB/F,GAAqB,YAAY,CAEnCA,CAAAA,GAAqB,YAAY,CAAC,MAAM,CAAG,EAC3CyG,EAAO0B,EACT,CACF,MAAO3B,EAAQD,EACjB,EACA,SAAUxB,CAAK,EACbmB,EAAYC,EAAcC,GAC1B,EAAIpG,GAAqB,YAAY,CAAC,MAAM,GACtC+E,EAAQgB,EACR/F,GAAqB,YAAY,EAElCA,GAAqB,YAAY,CAAC,MAAM,CAAG,GAE5CyG,EAAO1B,EACb,EAEJ,CACF,CACF,CACA,IAAIqD,EAAuBpP,EAc3B,GAbAkN,EAAYC,EAAcC,GAC1B,IAAMA,GACHO,CAAAA,EAAcD,GACf,IAAMA,EAAM,MAAM,EAChBiB,GAAuB,WACrBM,GACEP,IACC,CAACA,GAAoB,CAAC,EACvBtK,QAAQ,KAAK,CACX,sMACF,CACJ,GACD4C,GAAqB,QAAQ,CAAG,IAAI,EACnC,EAAIA,GAAqB,YAAY,CAAC,MAAM,CAC9C,MACG,AAACqE,EAAW0B,EAAgB/F,GAAqB,YAAY,EAC7DA,GAAqB,YAAY,CAAC,MAAM,CAAG,EAC5CqE,EAEJ,MAAO,CACL,KAAM,SAAUmC,CAAO,CAAEC,CAAM,EAC7BwB,EAAkB,CAAC,EACnB,IAAM7B,EACD,CAACpG,GAAqB,QAAQ,CAAG0G,EAClCnB,EAAY,WACV,OAAOe,EACL8B,EACA5B,EACAC,EAEJ,EAAC,EACDD,EAAQ4B,EACd,CACF,CACF,EACAN,EAAQ,KAAK,CAAG,SAAUpI,CAAE,EAC1B,OAAO,WACL,OAAOA,EAAG,KAAK,CAAC,KAAM1D,UACxB,CACF,EACA8L,EAAQ,YAAY,CAAG,SAAU7E,CAAO,CAAEpB,CAAM,CAAEiC,CAAQ,EACxD,GAAI,MAASb,EACX,MAAM9G,MACJ,wDACE8G,EACA,KAEN,IAIMnF,EAJFR,EAAQmE,EAAO,CAAC,EAAGwB,EAAQ,KAAK,EAClC3M,EAAM2M,EAAQ,GAAG,CACjBX,EAAQW,EAAQ,MAAM,CACxB,GAAI,MAAQpB,EAAQ,CAElBnH,EAAG,CACD,GACEoH,GAAe,IAAI,CAACD,EAAQ,QAC3B/D,CAAAA,EAA2B3I,OAAO,wBAAwB,CACzD0M,EACA,OACA,GAAG,AAAD,GACJ/D,EAAyB,cAAc,CACvC,CACAA,EAA2B,CAAC,EAC5B,MAAMpD,CACR,CACAoD,EAA2B,KAAK,IAAM+D,EAAO,GAAG,AAClD,CAIA,IAAKwG,KAHLvK,GAA6BwE,CAAAA,EAAQZ,GAAS,EAC9CE,EAAYC,IACThE,CAAAA,EAAuBgE,EAAO,GAAG,EAAIvL,EAAM,GAAKuL,EAAO,GAAG,EAC5CA,EACf,AAACC,GAAe,IAAI,CAACD,EAAQwG,IAC3B,QAAUA,GACV,WAAaA,GACb,aAAeA,GACd,SAAUA,GAAY,KAAK,IAAMxG,EAAO,GAAG,AAAD,GAC1CvE,CAAAA,CAAK,CAAC+K,EAAS,CAAGxG,CAAM,CAACwG,EAAS,AAAD,CACxC,CACA,IAAIA,EAAWrM,UAAU,MAAM,CAAG,EAClC,GAAI,IAAMqM,EAAU/K,EAAM,QAAQ,CAAGwG,OAChC,GAAI,EAAIuE,EAAU,CACrBvK,EAA2BlF,MAAMyP,GACjC,IAAK,IAAI5N,EAAI,EAAGA,EAAI4N,EAAU5N,IAC5BqD,CAAwB,CAACrD,EAAE,CAAGuB,SAAS,CAACvB,EAAI,EAAE,AAChD6C,CAAAA,EAAM,QAAQ,CAAGQ,CACnB,CAEA,IADAR,EAAQ6E,EAAac,EAAQ,IAAI,CAAE3M,EAAK,KAAK,EAAG,KAAK,EAAGgM,EAAOhF,GAC1DhH,EAAM,EAAGA,EAAM0F,UAAU,MAAM,CAAE1F,IACpCkM,EAAkBxG,SAAS,CAAC1F,EAAI,CAAEgH,EAAM,IAAI,EAC9C,OAAOA,CACT,EACAwK,EAAQ,aAAa,CAAG,SAAUQ,CAAY,EAgB5C,MAPAA,AARAA,CAAAA,EAAe,CACb,SAAU5J,EACV,cAAe4J,EACf,eAAgBA,EAChB,aAAc,EACd,SAAU,KACV,SAAU,IACZ,GACa,QAAQ,CAAGA,EACxBA,EAAa,QAAQ,CAAG,CACtB,SAAU3J,EACV,SAAU2J,CACZ,EACAA,EAAa,gBAAgB,CAAG,KAChCA,EAAa,iBAAiB,CAAG,KAC1BA,CACT,EACAR,EAAQ,aAAa,CAAG,SAAU5J,CAAI,CAAE2D,CAAM,CAAEiC,CAAQ,EACtD,GAAI7E,EAAmBf,GACrB,IAAK,IA8BHmK,EA9BO5N,EAAI,EAAGA,EAAIuB,UAAU,MAAM,CAAEvB,IACpC+H,EAAkBxG,SAAS,CAACvB,EAAE,CAAEyD,OAC/B,CAUH,GATAzD,EAAI,GAEF,MAAK,IAAMyD,GACV,UAAa,OAAOA,GACnB,OAASA,GACT,IAAM/I,OAAO,IAAI,CAAC+I,GAAM,MAAM,GAEhCzD,CAAAA,GACE,kIAAiI,EACjI,OAASyD,EAAM,IAAIqK,EAAa,YAElC3F,GAAY1E,GACPqK,EAAa,QACd,KAAK,IAAMrK,GAAQA,EAAK,QAAQ,GAAKqE,EAClC,CAACgG,EACA,IACCtK,CAAAA,EAAyBC,EAAK,IAAI,GAAK,SAAQ,EAChD,MACDzD,EACC,oEAAoE,EACrE8N,EAAa,OAAOrK,EAC7Bd,QAAQ,KAAK,CACX,oJACAmL,EACA9N,EAEJ,CAIA,GAFAA,EAAI,CAAC,EACL8N,EAAa,KACT,MAAQ1G,EACV,IAAKwG,KAAahB,IAChB,CAAE,YAAYxF,CAAK,GACnB,QAASA,GACR,CAACwF,GAA4B,CAAC,EAC/BjK,QAAQ,IAAI,CACV,gLACF,EACFwE,EAAYC,IACThE,CAAAA,EAAuBgE,EAAO,GAAG,EAAI0G,EAAa,GAAK1G,EAAO,GAAG,EACpEA,EACEC,GAAe,IAAI,CAACD,EAAQwG,IAC1B,QAAUA,GACV,WAAaA,GACb,aAAeA,GACd5N,CAAAA,CAAC,CAAC4N,EAAS,CAAGxG,CAAM,CAACwG,EAAS,AAAD,EACpC,IAAIG,EAAiBxM,UAAU,MAAM,CAAG,EACxC,GAAI,IAAMwM,EAAgB/N,EAAE,QAAQ,CAAGqJ,OAClC,GAAI,EAAI0E,EAAgB,CAC3B,IACE,IAAIC,EAAa7P,MAAM4P,GAAiBE,EAAK,EAC7CA,EAAKF,EACLE,IAEAD,CAAU,CAACC,EAAG,CAAG1M,SAAS,CAAC0M,EAAK,EAAE,AACpCvT,CAAAA,OAAO,MAAM,EAAIA,OAAO,MAAM,CAACsT,GAC/BhO,EAAE,QAAQ,CAAGgO,CACf,CACA,GAAIvK,GAAQA,EAAK,YAAY,CAC3B,IAAKmK,KAAcG,EAAiBtK,EAAK,YAAY,CACnD,KAAK,IAAMzD,CAAC,CAAC4N,EAAS,EAAK5N,CAAAA,CAAC,CAAC4N,EAAS,CAAGG,CAAc,CAACH,EAAS,AAAD,EAQpE,OAPAE,GACEI,AA34BJ,SAAoCrL,CAAK,CAAEsL,CAAW,EACpD,SAASC,IACPzB,IACG,CAACA,GAA6B,CAAC,EAChChK,QAAQ,KAAK,CACX,0OACAwL,EACF,CACJ,CACAC,EAAsB,cAAc,CAAG,CAAC,EACxC1T,OAAO,cAAc,CAACmI,EAAO,MAAO,CAClC,IAAKuL,EACL,aAAc,CAAC,CACjB,EACF,EA83BMpO,EACA,YAAe,OAAOyD,EAClBA,EAAK,WAAW,EAAIA,EAAK,IAAI,EAAI,UACjCA,GAEDiE,EAAajE,EAAMqK,EAAY,KAAK,EAAG,KAAK,EAAG7G,IAAYjH,EACpE,EACAqN,EAAQ,SAAS,CAAG,WAClB,IAAIgB,EAAY,CAAE,QAAS,IAAK,EAEhC,OADA3T,OAAO,IAAI,CAAC2T,GACLA,CACT,EACAhB,EAAQ,UAAU,CAAG,SAAUiB,CAAM,EACnC,MAAQA,GAAUA,EAAO,QAAQ,GAAKjK,EAClC1B,QAAQ,KAAK,CACX,uIAEF,YAAe,OAAO2L,EACpB3L,QAAQ,KAAK,CACX,0DACA,OAAS2L,EAAS,OAAS,OAAOA,GAEpC,IAAMA,EAAO,MAAM,EACnB,IAAMA,EAAO,MAAM,EACnB3L,QAAQ,KAAK,CACX,+EACA,IAAM2L,EAAO,MAAM,CACf,2CACA,+CAEZ,MAAQA,GACN,MAAQA,EAAO,YAAY,EAC3B3L,QAAQ,KAAK,CACX,yGAEJ,IACE4L,EADEC,EAAc,CAAE,SAAUrK,EAAwB,OAAQmK,CAAO,EAgBrE,OAdA5T,OAAO,cAAc,CAAC8T,EAAa,cAAe,CAChD,WAAY,CAAC,EACb,aAAc,CAAC,EACf,IAAK,WACH,OAAOD,CACT,EACA,IAAK,SAAUpS,CAAI,EACjBoS,EAAUpS,EACVmS,EAAO,IAAI,EACTA,EAAO,WAAW,EACjB5T,CAAAA,OAAO,cAAc,CAAC4T,EAAQ,OAAQ,CAAE,MAAOnS,CAAK,GACpDmS,EAAO,WAAW,CAAGnS,CAAI,CAC9B,CACF,GACOqS,CACT,EACAnB,EAAQ,cAAc,CAAGhF,EACzBgF,EAAQ,IAAI,CAAG,SAAU3C,CAAI,EAC3B,MAAO,CACL,SAAUpG,EACV,SAAU,CAAE,QAAS,GAAI,QAASoG,CAAK,EACvC,MAAOF,CACT,CACF,EACA6C,EAAQ,IAAI,CAAG,SAAU5J,CAAI,CAAEgL,CAAO,MAWhCF,EAeJ,OAzBA/J,EAAmBf,IACjBd,QAAQ,KAAK,CACX,qEACA,OAASc,EAAO,OAAS,OAAOA,GAQpC/I,OAAO,cAAc,CANrB+T,EAAU,CACR,SAAUpK,EACV,KAAMZ,EACN,QAAS,KAAK,IAAMgL,EAAU,KAAOA,CACvC,EAE+B,cAAe,CAC5C,WAAY,CAAC,EACb,aAAc,CAAC,EACf,IAAK,WACH,OAAOF,CACT,EACA,IAAK,SAAUpS,CAAI,EACjBoS,EAAUpS,EACVsH,EAAK,IAAI,EACPA,EAAK,WAAW,EACf/I,CAAAA,OAAO,cAAc,CAAC+I,EAAM,OAAQ,CAAE,MAAOtH,CAAK,GAClDsH,EAAK,WAAW,CAAGtH,CAAI,CAC5B,CACF,GACOsS,CACT,EACApB,EAAQ,eAAe,CAAG,SAAUqB,CAAK,EACvC,IAAIC,EAAiBpJ,GAAqB,CAAC,CACzCqJ,EAAoB,CAAC,CACvBrJ,CAAAA,GAAqB,CAAC,CAAGqJ,EACzBA,EAAkB,cAAc,CAAG,IAAIC,IACvC,GAAI,CACF,IAAI/C,EAAc4C,IAChBI,EAA0BvJ,GAAqB,CAAC,AAClD,QAASuJ,GACPA,EAAwBF,EAAmB9C,GAC7C,UAAa,OAAOA,GAClB,OAASA,GACT,YAAe,OAAOA,EAAY,IAAI,EACtCA,EAAY,IAAI,CAACjB,EAAMiC,GAC3B,CAAE,MAAOxC,EAAO,CACdwC,GAAkBxC,EACpB,QAAU,CACR,OAASqE,GACPC,EAAkB,cAAc,EAC/B,CAACF,EAAQE,EAAkB,cAAc,CAAC,IAAI,CAC/CA,EAAkB,cAAc,CAAC,KAAK,GACtC,GAAKF,GACH/L,QAAQ,IAAI,CACV,sMACF,EACD4C,GAAqB,CAAC,CAAGoJ,CAC9B,CACF,EACAtB,EAAQ,wBAAwB,CAAG,WACjC,OAAOzC,IAAoB,eAAe,EAC5C,EACAyC,EAAQ,GAAG,CAAG,SAAU0B,CAAM,EAC5B,OAAOnE,IAAoB,GAAG,CAACmE,EACjC,EACA1B,EAAQ,cAAc,CAAG,SAAU2B,CAAM,CAAEC,CAAY,CAAEC,CAAS,EAChE,OAAOtE,IAAoB,cAAc,CACvCoE,EACAC,EACAC,EAEJ,EACA7B,EAAQ,WAAW,CAAG,SAAUzD,CAAQ,CAAEuF,CAAI,EAC5C,OAAOvE,IAAoB,WAAW,CAAChB,EAAUuF,EACnD,EACA9B,EAAQ,UAAU,CAAG,SAAU+B,CAAO,EACpC,IAAIlI,EAAa0D,IAKjB,OAJAwE,EAAQ,QAAQ,GAAKlL,GACnBvB,QAAQ,KAAK,CACX,gIAEGuE,EAAW,UAAU,CAACkI,EAC/B,EACA/B,EAAQ,aAAa,CAAG,SAAUvR,CAAK,CAAEuT,CAAW,EAClD,OAAOzE,IAAoB,aAAa,CAAC9O,EAAOuT,EAClD,EACAhC,EAAQ,gBAAgB,CAAG,SAAUvR,CAAK,CAAEwT,CAAY,EACtD,OAAO1E,IAAoB,gBAAgB,CAAC9O,EAAOwT,EACrD,EACAjC,EAAQ,SAAS,CAAG,SAAUkC,CAAM,CAAEJ,CAAI,EACxC,OAAOvE,IAAoB,SAAS,CAAC2E,EAAQJ,EAC/C,EACA9B,EAAQ,KAAK,CAAG,WACd,OAAOzC,IAAoB,KAAK,EAClC,EACAyC,EAAQ,mBAAmB,CAAG,SAAUmC,CAAG,CAAED,CAAM,CAAEJ,CAAI,EACvD,OAAOvE,IAAoB,mBAAmB,CAAC4E,EAAKD,EAAQJ,EAC9D,EACA9B,EAAQ,kBAAkB,CAAG,SAAUkC,CAAM,CAAEJ,CAAI,EACjD,OAAOvE,IAAoB,kBAAkB,CAAC2E,EAAQJ,EACxD,EACA9B,EAAQ,eAAe,CAAG,SAAUkC,CAAM,CAAEJ,CAAI,EAC9C,OAAOvE,IAAoB,eAAe,CAAC2E,EAAQJ,EACrD,EACA9B,EAAQ,OAAO,CAAG,SAAUkC,CAAM,CAAEJ,CAAI,EACtC,OAAOvE,IAAoB,OAAO,CAAC2E,EAAQJ,EAC7C,EACA9B,EAAQ,aAAa,CAAG,SAAUoC,CAAW,CAAEC,CAAO,EACpD,OAAO9E,IAAoB,aAAa,CAAC6E,EAAaC,EACxD,EACArC,EAAQ,UAAU,CAAG,SAAUqC,CAAO,CAAEC,CAAU,CAAEC,CAAI,EACtD,OAAOhF,IAAoB,UAAU,CAAC8E,EAASC,EAAYC,EAC7D,EACAvC,EAAQ,MAAM,CAAG,SAAUiC,CAAY,EACrC,OAAO1E,IAAoB,MAAM,CAAC0E,EACpC,EACAjC,EAAQ,QAAQ,CAAG,SAAU4B,CAAY,EACvC,OAAOrE,IAAoB,QAAQ,CAACqE,EACtC,EACA5B,EAAQ,oBAAoB,CAAG,SAC7BwC,CAAS,CACTC,CAAW,CACXC,CAAiB,EAEjB,OAAOnF,IAAoB,oBAAoB,CAC7CiF,EACAC,EACAC,EAEJ,EACA1C,EAAQ,aAAa,CAAG,WACtB,OAAOzC,IAAoB,aAAa,EAC1C,EACAyC,EAAQ,OAAO,CAAG,kCAClB,aAAgB,OAAOhB,gCACrB,YACE,OAAOA,+BAA+B,0BAA0B,EAClEA,+BAA+B,0BAA0B,CAAC3K,QAC9D,G,+DCn/CAhE,CAAAA,EAAO,OAAO,CAAG,EAAjB,iD,qDCLF,AAAC,MAAK,aAAa,IAAIqC,EAAE,CAAC,IAAIA,IAA0FA,EAAE,OAAO,CAA/F,SAAcA,CAAC,EAAwB,IAAtB,IAAIK,EAAE,KAAKhC,EAAE2B,EAAE,MAAM,CAAO3B,GAAGgC,EAAEA,AAAE,GAAFA,EAAKL,EAAE,UAAU,CAAC,EAAE3B,GAAG,OAAOgC,IAAI,CAAC,CAAe,CAAC,EAAMA,EAAE,CAAC,EAAE,SAASF,EAAoB9B,CAAC,EAAE,IAAI6B,EAAEG,CAAC,CAAChC,EAAE,CAAC,GAAG6B,AAAIU,KAAAA,IAAJV,EAAe,OAAOA,EAAE,OAAO,CAAC,IAAIjD,EAAEoD,CAAC,CAAChC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAM4B,EAAE,GAAK,GAAG,CAACD,CAAC,CAAC3B,EAAE,CAACpB,EAAEA,EAAE,OAAO,CAACkD,GAAqBF,EAAE,EAAK,QAAQ,CAAIA,GAAE,OAAOI,CAAC,CAAChC,EAAE,CAAC,OAAOpB,EAAE,OAAO,CAA6CkD,EAAoB,EAAE,CAACC,UAAU,IAAI,IAAI/B,EAAE8B,EAAoB,IAAKxC,CAAAA,EAAO,OAAO,CAACU,CAAC,I,+0BCkBvc4R,E,wRCYjB,OAAeC,EAqBpBC,YAAY,CAAEC,SAAAA,CAAQ,CAAEC,WAAAA,CAAU,CAA4B,CAAE,CAC9D,IAAI,CAACD,QAAQ,CAAGA,EAChB,IAAI,CAACC,UAAU,CAAGA,CACpB,CACF,CCtDO,IAAMC,EAAgB,cAgBhBC,EAAiB,CAjBJ,MAKmB,yBACF,uBAOJ,mBADrC,+BAWD,ACvBM,OAAMC,EACX,OAAOC,IACLlT,CAAS,CACTmT,CAAqB,CACrBC,CAAiB,CACZ,CACL,IAAM5U,EAAQqK,QAAQqK,GAAG,CAAClT,EAAQmT,EAAMC,SACxC,AAAI,AAAiB,YAAjB,OAAO5U,EACFA,EAAM6U,IAAI,CAACrT,GAGbxB,CACT,CAEA,OAAO8U,IACLtT,CAAS,CACTmT,CAAqB,CACrB3U,CAAU,CACV4U,CAAa,CACJ,CACT,OAAOvK,QAAQyK,GAAG,CAACtT,EAAQmT,EAAM3U,EAAO4U,EAC1C,CAEA,OAAOG,IAAsBvT,CAAS,CAAEmT,CAAqB,CAAW,CACtE,OAAOtK,QAAQ0K,GAAG,CAACvT,EAAQmT,EAC7B,CAEA,OAAOK,eACLxT,CAAS,CACTmT,CAAqB,CACZ,CACT,OAAOtK,QAAQ2K,cAAc,CAACxT,EAAQmT,EACxC,CACF,CC1BO,MAAMM,UAA6BrP,MACxCwO,aAAc,CACZ,KAAK,CACH,qGAEJ,CAEA,OAAcc,UAAW,CACvB,MAAM,IAAID,CACZ,CACF,CAUO,MAAME,UAAuBC,QAGlChB,YAAYtQ,CAA4B,CAAE,CAGxC,KAAK,GAEL,IAAI,CAACA,OAAO,CAAG,IAAIuR,MAAMvR,EAAS,CAChC4Q,IAAIlT,CAAM,CAAEmT,CAAI,CAAEC,CAAQ,EAIxB,GAAI,AAAgB,UAAhB,OAAOD,EACT,OAAOF,EAAe,GAAG,CAACjT,EAAQmT,EAAMC,GAG1C,IAAMU,EAAaX,EAAKY,WAAW,GAK7BC,EAAW5W,OAAO6W,IAAI,CAAC3R,GAAS4R,IAAI,CACxC,AAAClR,GAAMA,EAAE+Q,WAAW,KAAOD,GAI7B,GAAI,AAAoB,SAAbE,EAGX,OAAOf,EAAe,GAAG,CAACjT,EAAQgU,EAAUZ,EAC9C,EACAE,IAAItT,CAAM,CAAEmT,CAAI,CAAE3U,CAAK,CAAE4U,CAAQ,EAC/B,GAAI,AAAgB,UAAhB,OAAOD,EACT,OAAOF,EAAe,GAAG,CAACjT,EAAQmT,EAAM3U,EAAO4U,GAGjD,IAAMU,EAAaX,EAAKY,WAAW,GAK7BC,EAAW5W,OAAO6W,IAAI,CAAC3R,GAAS4R,IAAI,CACxC,AAAClR,GAAMA,EAAE+Q,WAAW,KAAOD,GAI7B,OAAOb,EAAe,GAAG,CAACjT,EAAQgU,GAAYb,EAAM3U,EAAO4U,EAC7D,EACAG,IAAIvT,CAAM,CAAEmT,CAAI,EACd,GAAI,AAAgB,UAAhB,OAAOA,EAAmB,OAAOF,EAAe,GAAG,CAACjT,EAAQmT,GAEhE,IAAMW,EAAaX,EAAKY,WAAW,GAK7BC,EAAW5W,OAAO6W,IAAI,CAAC3R,GAAS4R,IAAI,CACxC,AAAClR,GAAMA,EAAE+Q,WAAW,KAAOD,UAI7B,AAAwB,SAAbE,GAGJf,EAAe,GAAG,CAACjT,EAAQgU,EACpC,EACAR,eAAexT,CAAM,CAAEmT,CAAI,EACzB,GAAI,AAAgB,UAAhB,OAAOA,EACT,OAAOF,EAAe,cAAc,CAACjT,EAAQmT,GAE/C,IAAMW,EAAaX,EAAKY,WAAW,GAK7BC,EAAW5W,OAAO6W,IAAI,CAAC3R,GAAS4R,IAAI,CACxC,AAAClR,GAAMA,EAAE+Q,WAAW,KAAOD,UAI7B,AAAwB,SAAbE,GAGJf,EAAe,cAAc,CAACjT,EAAQgU,EAC/C,CACF,EACF,CAMA,OAAcG,KAAK7R,CAAgB,CAAmB,CACpD,OAAO,IAAIuR,MAAuBvR,EAAS,CACzC4Q,IAAIlT,CAAM,CAAEmT,CAAI,CAAEC,CAAQ,EACxB,OAAQD,GACN,IAAK,SACL,IAAK,SACL,IAAK,MACH,OAAOM,EAAqBC,QAAQ,AACtC,SACE,OAAOT,EAAe,GAAG,CAACjT,EAAQmT,EAAMC,EAC5C,CACF,CACF,EACF,CASQgB,MAAM5V,CAAwB,CAAU,QAC9C,AAAIqC,MAAMwT,OAAO,CAAC7V,GAAeA,EAAM8V,IAAI,CAAC,MAErC9V,CACT,CAQA,OAAc8B,KAAKgC,CAAsC,CAAW,QAClE,AAAIA,aAAmBsR,QAAgBtR,EAEhC,IAAIqR,EAAerR,EAC5B,CAEOiS,OAAO1V,CAAY,CAAEL,CAAa,CAAQ,CAC/C,IAAMgW,EAAW,IAAI,CAAClS,OAAO,CAACzD,EAAK,AAC/B,AAAoB,WAApB,OAAO2V,EACT,IAAI,CAAClS,OAAO,CAACzD,EAAK,CAAG,CAAC2V,EAAUhW,EAAM,CAC7BqC,MAAMwT,OAAO,CAACG,GACvBA,EAASC,IAAI,CAACjW,GAEd,IAAI,CAAC8D,OAAO,CAACzD,EAAK,CAAGL,CAEzB,CAEOkW,OAAO7V,CAAY,CAAQ,CAChC,OAAO,IAAI,CAACyD,OAAO,CAACzD,EAAK,AAC3B,CAEOqU,IAAIrU,CAAY,CAAiB,CACtC,IAAML,EAAQ,IAAI,CAAC8D,OAAO,CAACzD,EAAK,QAChC,AAAI,AAAiB,SAAVL,EAA8B,IAAI,CAAC4V,KAAK,CAAC5V,GAE7C,IACT,CAEO+U,IAAI1U,CAAY,CAAW,CAChC,OAAO,AAA8B,SAAvB,IAAI,CAACyD,OAAO,CAACzD,EAAK,AAClC,CAEOyU,IAAIzU,CAAY,CAAEL,CAAa,CAAQ,CAC5C,IAAI,CAAC8D,OAAO,CAACzD,EAAK,CAAGL,CACvB,CAEOmW,QACLC,CAAkE,CAClEC,CAAa,CACP,CACN,IAAK,GAAM,CAAChW,EAAML,EAAM,GAAI,IAAI,CAACsW,OAAO,GACtCF,EAAWG,IAAI,CAACF,EAASrW,EAAOK,EAAM,IAAI,CAE9C,CAEA,CAAQiW,SAA6C,CACnD,IAAK,IAAMvW,KAAOnB,OAAO6W,IAAI,CAAC,IAAI,CAAC3R,OAAO,EAAG,CAC3C,IAAMzD,EAAON,EAAIwV,WAAW,GAGtBvV,EAAQ,IAAI,CAAC0U,GAAG,CAACrU,EAEvB,MAAM,CAACA,EAAML,EAAM,AACrB,CACF,CAEA,CAAQyV,MAAgC,CACtC,IAAK,IAAM1V,KAAOnB,OAAO6W,IAAI,CAAC,IAAI,CAAC3R,OAAO,EAAG,CAC3C,IAAMzD,EAAON,EAAIwV,WAAW,EAC5B,OAAMlV,CACR,CACF,CAEA,CAAQmW,QAAkC,CACxC,IAAK,IAAMzW,KAAOnB,OAAO6W,IAAI,CAAC,IAAI,CAAC3R,OAAO,EAAG,CAG3C,IAAM9D,EAAQ,IAAI,CAAC0U,GAAG,CAAC3U,EAEvB,OAAMC,CACR,CACF,CAEO,CAACmC,OAAOsU,QAAQ,CAAC,EAAsC,CAC5D,OAAO,IAAI,CAACH,OAAO,EACrB,CACF,C,kNCzNO,OAAMI,UAAoC9Q,MAC/CwO,aAAc,CACZ,KAAK,CACH,mJAEJ,CAEA,OAAcc,UAAW,CACvB,MAAM,IAAIwB,CACZ,CACF,CAcO,MAAMC,EACX,OAAchB,KAAKiB,CAAuB,CAA0B,CAClE,OAAO,IAAIvB,MAAMuB,EAAgB,CAC/BlC,IAAIlT,CAAM,CAAEmT,CAAI,CAAEC,CAAQ,EACxB,OAAQD,GACN,IAAK,QACL,IAAK,SACL,IAAK,MACH,OAAO+B,EAA4BxB,QAAQ,AAC7C,SACE,OAAOT,EAAe,GAAG,CAACjT,EAAQmT,EAAMC,EAC5C,CACF,CACF,EACF,CACF,CAEA,IAAMiC,EAA8B1U,OAAO2U,GAAG,CAAC,wBAmBxC,SAASC,EACdjT,CAAgB,CAChBkT,CAA+B,EAE/B,IAAMC,EAAuBC,AArBxB,SACLN,CAAwB,EAExB,IAAMO,EAA0CP,CAA0B,CACxEC,EACD,QACD,AAAI,AAACM,GAAa9U,MAAMwT,OAAO,CAACsB,IAAaA,AAAoB,IAApBA,EAASC,MAAM,CAIrDD,EAHE,EAAE,AAIb,EAUuDH,GACrD,GAAIC,AAAgC,IAAhCA,EAAqBG,MAAM,CAC7B,MAAO,GAMT,IAAMC,EAAa,IAAI1V,EAAAA,eAAeA,CAACmC,GACjCwT,EAAkBD,EAAWE,MAAM,GAGzC,IAAK,IAAM7X,KAAUuX,EACnBI,EAAWvC,GAAG,CAACpV,GAIjB,IAAK,IAAMA,KAAU4X,EACnBD,EAAWvC,GAAG,CAACpV,GAGjB,MAAO,EACT,CAMO,MAAM8X,EACX,OAAcC,KACZb,CAAuB,CACvBc,CAA6C,CAC5B,CACjB,IAAMC,EAAkB,IAAIhW,EAAAA,eAAeA,CAAC,IAAIyT,SAChD,IAAK,IAAM1V,KAAUkX,EAAQW,MAAM,GACjCI,EAAgB7C,GAAG,CAACpV,GAGtB,IAAIkY,EAAmC,EAAE,CACnCC,EAAkB,IAAI9E,IACtB+E,EAAwB,KAE5B,IAAMC,EAAYC,EAAAA,gBAAAA,CAAAA,QAAyB,GAO3C,GANID,GACFA,CAAAA,EAAUE,kBAAkB,CAAG,EAAG,EAIpCL,EAAiBM,AADEP,EAAgBJ,MAAM,GACbY,MAAM,CAAC,AAACjZ,GAAM2Y,EAAgB9C,GAAG,CAAC7V,EAAEmB,IAAI,GAChEqX,EAAiB,CACnB,IAAMU,EAA8B,EAAE,CACtC,IAAK,IAAM1Y,KAAUkY,EAAgB,CACnC,IAAMS,EAAc,IAAI1W,EAAAA,eAAeA,CAAC,IAAIyT,SAC5CiD,EAAYvD,GAAG,CAACpV,GAChB0Y,EAAkBnC,IAAI,CAACoC,EAAYC,QAAQ,GAC7C,CAEAZ,EAAgBU,EAClB,CACF,EAEMG,EAAiB,IAAIlD,MAAMsC,EAAiB,CAChDjD,IAAIlT,CAAM,CAAEmT,CAAI,CAAEC,CAAQ,EACxB,OAAQD,GAEN,KAAKkC,EACH,OAAOe,CAIT,KAAK,SACH,OAAO,SAAU,GAAGxV,CAAiC,EACnDyV,EAAgBW,GAAG,CACjB,AAAmB,UAAnB,OAAOpW,CAAI,CAAC,EAAE,CAAgBA,CAAI,CAAC,EAAE,CAAGA,CAAI,CAAC,EAAE,CAAC/B,IAAI,EAEtD,GAAI,CAEF,OADAmB,EAAO0U,MAAM,IAAI9T,GACVmW,CACT,QAAU,CACRT,GACF,CACF,CACF,KAAK,MACH,OAAO,SAAU,GAAG1V,CAAmB,EACrCyV,EAAgBW,GAAG,CACjB,AAAmB,UAAnB,OAAOpW,CAAI,CAAC,EAAE,CAAgBA,CAAI,CAAC,EAAE,CAAGA,CAAI,CAAC,EAAE,CAAC/B,IAAI,EAEtD,GAAI,CAEF,OADAmB,EAAOsT,GAAG,IAAI1S,GACPmW,CACT,QAAU,CACRT,GACF,CACF,CAEF,SACE,OAAOrD,EAAe,GAAG,CAACjT,EAAQmT,EAAMC,EAC5C,CACF,CACF,GAEA,OAAO2D,CACT,CACF,CAwCA,SAASE,EAA6BC,CAAyB,EAE7D,GAAI,AAZ0B,WAAvBC,AAWcC,AAAAA,GAAAA,EAAAA,uBAAAA,AAAAA,EAAwBF,GAXzBG,KAAK,CAcvB,MAAM,IAAInC,CAEd,CCnMO,IAAMoC,EAA6B,QAsEpCC,EAAuB,CAI3BC,OAAQ,SAKRC,sBAAuB,MAIvBC,oBAAqB,MAIrBC,cAAe,iBAIfC,IAAK,MAILC,WAAY,aAIZC,WAAY,aAIZC,UAAW,aAIXC,gBAAiB,mBACnB,EAKuB,EACrB,GAAGT,CAAoB,CACvBU,MAAO,CACLC,aAAc,CACZX,EAAqBE,qBAAqB,CAC1CF,EAAqBI,aAAa,CACnC,CACDQ,WAAY,CACVZ,EAAqBE,qBAAqB,CAC1CF,EAAqBI,aAAa,CAClCJ,EAAqBO,UAAU,CAC/BP,EAAqBM,UAAU,CAChC,CACDO,cAAe,CAEbb,EAAqBK,GAAG,CACzB,CACDS,WAAY,CACVd,EAAqBG,mBAAmB,CACxCH,EAAqBS,eAAe,CACrC,CACDM,QAAS,CACPf,EAAqBE,qBAAqB,CAC1CF,EAAqBI,aAAa,CAClCJ,EAAqBG,mBAAmB,CACxCH,EAAqBS,eAAe,CACpCT,EAAqBC,MAAM,CAC3BD,EAAqBO,UAAU,CAChC,CACDS,SAAU,CAERhB,EAAqBE,qBAAqB,CAC1CF,EAAqBG,mBAAmB,CACxCH,EAAqBS,eAAe,CACpCT,EAAqBI,aAAa,CACnC,AACH,CACF,G,mDC3KA,IAAKa,EAAcA,SAAdA,CAAc,E,ygBAAdA,C,EAAAA,GAAcA,CAAAA,GAedC,EAAkBA,SAAlBA,CAAkB,E,iIAAlBA,C,EAAAA,GAAkBA,CAAAA,GAKlBC,EAAcA,SAAdA,CAAc,E,uMAAdA,C,EAAAA,GAAcA,CAAAA,GAOdC,EAAkBA,SAAlBA,CAAkB,E,y6CAAlBA,C,EAAAA,GAAkBA,CAAAA,GAmClBC,EAAeA,SAAfA,CAAe,E,+CAAfA,C,EAAAA,GAAeA,CAAAA,GAIfC,EAAUA,SAAVA,CAAU,E,gOAAVA,C,EAAAA,GAAUA,CAAAA,GAQVC,EAAaA,SAAbA,CAAa,E,mLAAbA,C,EAAAA,GAAaA,CAAAA,GAObC,EAAUA,SAAVA,CAAU,E,4CAAVA,C,EAAAA,GAAUA,CAAAA,GAIVC,EAAQA,SAARA,CAAQ,E,sCAARA,C,EAAAA,GAAQA,CAAAA,GAIRC,EAAyBA,SAAzBA,CAAyB,E,uDAAzBA,C,EAAAA,GAAyBA,CAAAA,GAIzBC,EAAmBA,SAAnBA,CAAmB,E,mHAAnBA,C,EAAAA,GAAmBA,CAAAA,GAKnBC,EAAcA,SAAdA,CAAc,E,sCAAdA,C,EAAAA,GAAcA,CAAAA,GCXZ,IAAMC,EAA+B,qBAKTzY,OAJO,uBAKJA,OAAOyY,EC3FtC,OAAMC,EAaXzG,YACE0G,CAA2C,CAC3CC,CAA6D,CAC7DnE,CAA+B,CAC/BI,CAA+B,CAC/B,C,IAOoBJ,EAJpB,IAAMoE,EACJF,GACAG,AD2CC,SACLF,CAAgD,CAChDD,CAA+B,EAK/B,IAAMhX,EAAUqR,EAAe,IAAI,CAAC4F,EAAIjX,OAAO,EAS/C,MAAO,CAAEkX,qBANoBE,AADPpX,EAAQ4Q,GAAG,CFjFQ,4BEkFMoG,EAAaI,aAAa,CAM1CC,wBAJCrX,EAAQiR,GAAG,CFlF3C,sCEsFuD,CACzD,EC5DgCgG,EAAKD,GAAcE,oBAAoB,CAE7DI,EAAc,AAAwCR,MAAxChE,CAAAA,EAAAA,EAAQlC,GAAG,CAACkG,EAA4BA,EAAAA,KAAAA,EAAxChE,EAA2C5W,KAAK,AAEpE,KAAI,CAACqb,SAAS,CAAG/b,CAAAA,CACf,EAAC0b,GACCI,GACAN,GACCM,CAAAA,IAAgBN,EAAaI,aAAa,EAGvCJ,AAA+B,mBAA/BA,EAAaI,aAAa,AAAoB,CAAC,EAGvD,IAAI,CAACI,cAAc,CAAGR,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAcI,aAAa,CACjD,IAAI,CAACK,eAAe,CAAGvE,CACzB,CAEAwE,QAAS,CACP,GAAI,CAAC,IAAI,CAACF,cAAc,CACtB,MAAM,qBAEL,CAFK,AAAI1V,MACR,0EADI,qB,MAAA,M,WAAA,EAEN,GAGF,IAAI,CAAC2V,eAAe,CAACzG,GAAG,CAAC,CACvBzU,KAAMua,EACN5a,MAAO,IAAI,CAACsb,cAAc,CAC1BG,SAAU,GACVC,SAA4D,MAC5D7a,OAAQqQ,GACRvQ,KAAM,GACR,EACF,CAEAgb,SAAU,CAIR,IAAI,CAACJ,eAAe,CAACzG,GAAG,CAAC,CACvBzU,KAAMua,EACN5a,MAAO,GACPyb,SAAU,GACVC,SAA4D,MAC5D7a,OAAQqQ,GACRvQ,KAAM,IACNH,QAAS,IAAInB,KAAK,EACpB,EACF,CACF,CCJA,SAASuc,EACPb,CAA0B,CAC1Bc,CAAiD,EAEjD,GACE,4BAA6Bd,EAAIjX,OAAO,EACxC,AAAkD,UAAlD,OAAOiX,EAAIjX,OAAO,CAAC,0BAA0B,CAC7C,CACA,IAAMgY,EAAiBf,EAAIjX,OAAO,CAAC,0BAA0B,CACvDlB,EAAkB,IAAIwS,QAE5B,IAAK,IAAM1V,KAAUsD,AChDlB,SAA4BC,CAAqB,EACtD,IAEIC,EACAC,EACAC,EACAC,EACAC,EANAC,EAAiB,EAAE,CACnBC,EAAM,EAOV,SAASC,IACP,KAAOD,EAAMP,EAAcmU,MAAM,EAAI,KAAK2E,IAAI,CAAC9Y,EAAc+Y,MAAM,CAACxY,KAClEA,GAAO,EAET,OAAOA,EAAMP,EAAcmU,MAAM,AACnC,CAQA,KAAO5T,EAAMP,EAAcmU,MAAM,EAAE,CAIjC,IAHAlU,EAAQM,EACRF,EAAwB,GAEjBG,KAEL,GAAIN,AAAO,MADXA,CAAAA,EAAKF,EAAc+Y,MAAM,CAACxY,EAAG,EACb,CAQd,IANAJ,EAAYI,EACZA,GAAO,EAEPC,IACAJ,EAAYG,EAELA,EAAMP,EAAcmU,MAAM,EAjB9BjU,AAAO,MAFdA,CAAAA,EAAKF,EAAc+Y,MAAM,CAACxY,EAAG,GAERL,AAAO,MAAPA,GAAcA,AAAO,MAAPA,GAkB7BK,GAAO,CAILA,CAAAA,EAAMP,EAAcmU,MAAM,EAAInU,AAA8B,MAA9BA,EAAc+Y,MAAM,CAACxY,IAErDF,EAAwB,GAExBE,EAAMH,EACNE,EAAe0S,IAAI,CAAChT,EAAcgZ,SAAS,CAAC/Y,EAAOE,IACnDF,EAAQM,GAIRA,EAAMJ,EAAY,CAEtB,MACEI,GAAO,EAIP,EAACF,GAAyBE,GAAOP,EAAcmU,MAAM,AAAD,GACtD7T,EAAe0S,IAAI,CAAChT,EAAcgZ,SAAS,CAAC/Y,EAAOD,EAAcmU,MAAM,EAE3E,CAEA,OAAO7T,CACT,EDhB4CuY,GACtClZ,EAAgBmT,MAAM,CAAC,aAAcrW,GAMvC,IAAK,IAAMA,KAAUiY,AAHG,IAAIhW,EAAAA,eAAeA,CAACiB,GAGP2U,MAAM,GACzCsE,EAAgB/G,GAAG,CAACpV,EAExB,CACF,C,oDEtGO,OAAMwc,UAAuBtW,MAClCwO,YAAY+H,CAAe,CAAEnY,CAAsB,CAAE,CACnD,KAAK,CACF,cAAamY,CAAAA,EAAQC,QAAQ,CAAC,KAAOD,EAAUA,EAAU,GAAE,EAAE,6BAC9DnY,GAEF,IAAI,CAAC3D,IAAI,CAAG,gBACd,CACF,CCLO,eAAegc,EACpBC,CAA4B,CAC5BxO,CAA0B,EAE1B,GAAI,CAACwO,EACH,OAAOxO,IAIT,IAAMyO,EAAyBC,EAAuBF,GACtD,GAAI,CACF,OAAO,MAAMxO,GACf,QAAU,CAER,IAAM2O,EAAiBC,AAyB3B,SACEC,CAAuB,CACvBC,CAAuB,EAEvB,IAAMC,EAAW,IAAI9J,IAAI4J,EAAKG,eAAe,EACvCC,EAAuB,IAAIhK,IAAI4J,EAAKK,uBAAuB,EACjE,MAAO,CACLF,gBAAiBF,EAAKE,eAAe,CAAC3E,MAAM,CAAC,AAAC8E,GAAQ,CAACJ,EAAS9H,GAAG,CAACkI,IACpEC,mBAAoBte,OAAOue,WAAW,CACpCve,OAAO0X,OAAO,CAACsG,EAAKM,kBAAkB,EAAE/E,MAAM,CAC5C,CAAC,CAACpY,EAAI,GAAK,CAAEA,CAAAA,KAAO4c,EAAKO,kBAAiB,IAG9CF,wBAAyBJ,EAAKI,uBAAuB,CAAC7E,MAAM,CAC1D,AAACiF,GAAY,CAACL,EAAqBhI,GAAG,CAACqI,GAE3C,CACF,EAzCMb,EACAC,EAAuBF,GAEzB,OAAMe,EAAmBf,EAAOG,EAClC,CACF,CASA,SAASD,EAAuBF,CAAgB,EAC9C,MAAO,CACLQ,gBAAiBR,EAAMQ,eAAe,CAAG,IAAIR,EAAMQ,eAAe,CAAC,CAAG,EAAE,CACxEI,mBAAoB,CAAE,GAAGZ,EAAMY,kBAAkB,AAAC,EAClDF,wBAAyBV,EAAMU,uBAAuB,CAClD,IAAIV,EAAMU,uBAAuB,CAAC,CAClC,EAAE,AACR,CACF,CAqBA,eAAeK,EACbtF,CAAoB,CACpB,CACE+E,gBAAAA,CAAe,CACfI,mBAAAA,CAAkB,CAClBF,wBAAAA,CAAuB,CACL,E,IAGlBjF,EADF,OAAOrS,QAAQjE,GAAG,CAAC,C,AACS,MAA1BsW,CAAAA,EAAAA,EAAUuF,gBAAgB,AAAD,EAAC,OAA1BvF,EAA4BwF,aAAa,CAACT,MACvCle,OAAO4X,MAAM,CAAC0G,MACdF,EACJ,CACH,CCxEA,IAAMQ,EAA2C,qBAEhD,CAFgD,AAAI5X,MACnD,8EAD+C,qB,MAAA,O,WAAA,EAEjD,EAEA,OAAM6X,EAGJ9B,SAAgB,CACd,MAAM6B,CACR,CAEAE,UAA8B,CAG9B,CAEAtX,KAAY,CACV,MAAMoX,CACR,CAEAG,MAAa,CACX,MAAMH,CACR,CAEAI,WAAkB,CAChB,MAAMJ,CACR,CAEA,OAAO3I,KAAQ1L,CAAK,CAAK,CACvB,OAAOA,CACT,CACF,CAEA,IAAM0U,EACJ,AAAsB,aAAtB,OAAO3J,YAA+BA,WAAmB4J,iBAAiB,C,6EChBrE,OAAMC,EASX3J,YAAY,CAAE4J,UAAAA,CAAS,CAAEC,QAAAA,CAAO,CAAEC,YAAAA,CAAW,CAAoB,CAAE,C,KAF3DC,cAAc,CAAG,IAAIpL,IAG3B,IAAI,CAACiL,SAAS,CAAGA,EACjB,IAAI,CAACC,OAAO,CAAGA,EACf,IAAI,CAACC,WAAW,CAAGA,EAEnB,IAAI,CAACE,aAAa,CAAG,GAAIC,CAAAA,GAAAA,EACzB,IAAI,CAACD,aAAa,CAACE,KAAK,EAC1B,CAEOC,MAAMtP,CAAe,CAAQ,CAClC,GC7BAmO,AAAY,OD6BGnO,GC5Bf,AAAmB,UAAnB,OD4BeA,GC3Bf,SD2BeA,GC1Bf,AAAwB,YAAxB,OAAOmO,AD0BQnO,EC1BAuP,IAAI,CD2BZ,IAAI,CAACR,SAAS,EACjBS,IAEF,IAAI,CAACT,SAAS,CACZ/O,EAAKyP,KAAK,CAAC,AAAClQ,GAAU,IAAI,CAACmQ,eAAe,CAAC,UAAWnQ,UAEnD,GAAI,AAAgB,YAAhB,OAAOS,EAEhB,IAAI,CAAC2P,WAAW,CAAC3P,QAEjB,MAAM,qBAAgE,CAAhE,AAAIrJ,MAAM,uDAAV,qB,MAAA,M,WAAA,EAA+D,EAEzE,CAEQgZ,YAAY9Q,CAAuB,CAAE,KDPf3E,CCSvB,KAAI,CAAC6U,SAAS,EACjBS,IAGF,IAAMI,EAAgBC,EAAAA,oBAAAA,CAAAA,QAA6B,GAC/CD,GACF,IAAI,CAACV,cAAc,CAAC3F,GAAG,CAACqG,GAG1B,IAAME,EAAiBC,EAAAA,qBAAAA,CAAAA,QAA8B,GAM/CC,EAAqBF,EACvBA,EAAeE,kBAAkB,CACjCJ,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAehG,KAAK,AAGnB,KAAI,CAACqG,0BAA0B,GAClC,IAAI,CAACA,0BAA0B,CAAG,IAAI,CAACC,mBAAmB,GAC1D,IAAI,CAACnB,SAAS,CAAC,IAAI,CAACkB,0BAA0B,GAQhD,IAAME,GDvCsBjW,ECuCS,UACnC,GAAI,CACF,MAAM6V,EAAAA,qBAAAA,CAAAA,GAAyB,CAAC,CAAEC,mBAAAA,CAAmB,EAAG,IACtDnR,IAEJ,CAAE,MAAOU,EAAO,CACd,IAAI,CAACmQ,eAAe,CAAC,WAAYnQ,EACnC,CACF,ED9CF,AAAIqP,EACKA,EAA6BhJ,IAAI,CAAC1L,GAEpCsU,EAAsB5I,IAAI,CAAC1L,IC6ChC,IAAI,CAACiV,aAAa,CAAC5F,GAAG,CAAC4G,EACzB,CAEA,MAAcD,qBAAsB,CAElC,OADA,MAAM,IAAIzZ,QAAc,AAACuK,GAAY,IAAI,CAACgO,OAAO,CAAEhO,IAC5C,IAAI,CAACoP,YAAY,EAC1B,CAEA,MAAcA,cAA8B,CAC1C,GAAI,AAA4B,IAA5B,IAAI,CAACjB,aAAa,CAAC9M,IAAI,CAAQ,OAEnC,IAAK,IAAMuN,KAAiB,IAAI,CAACV,cAAc,CAC7CU,EAAchG,KAAK,CAAG,QAGxB,IAAMd,EAAYC,EAAAA,gBAAAA,CAAAA,QAAyB,GAC3C,GAAI,CAACD,EACH,MAAM,qBAAoE,CAApE,IAAImE,EAAe,kDAAnB,qB,MAAA,O,WAAA,EAAmE,GAG3E,OAAOG,EAAuBtE,EAAW,KACvC,IAAI,CAACqG,aAAa,CAAClb,KAAK,GACjB,IAAI,CAACkb,aAAa,CAACkB,MAAM,IAEpC,CAEQX,gBAAgBY,CAAgC,CAAE/Q,CAAc,CAAE,CASxE,GANA3H,QAAQ2H,KAAK,CACX+Q,AAAa,YAAbA,EACI,0CACA,uDACJ/Q,GAEE,IAAI,CAAC0P,WAAW,CAElB,GAAI,CACF,AAAgB,MAAhB,IAAI,CAACA,WAAW,EAAhB,IAAI,CAACA,WAAW,MAAhB,IAAI,CAAe1P,EACrB,CAAE,MAAOgR,EAAc,CACrB3Y,QAAQ2H,KAAK,CACX,qBAKC,CALD,IAAI0N,EACF,0EACA,CACEuD,MAAOD,CACT,GAJF,qB,MAAA,O,WAAA,EAKA,GAEJ,CAEJ,CACF,CAEA,SAASf,IACP,MAAM,qBAEL,CAFK,AAAI7Y,MACR,uGADI,qB,MAAA,M,WAAA,EAEN,EACF,CE9HO,ICvBM8Z,EAAe,CAC1B,MACA,OACA,UACA,OACA,MACA,SACA,QACD,CCTKC,EAAiB,AAACC,IACtB,IAAMC,EAAwB,CAAC,UAAU,CAIzC,GAAID,EAASE,UAAU,CAAC,KAAM,CAC5B,IAAMC,EAAgBH,EAASI,KAAK,CAAC,KAErC,IAAK,IAAI9b,EAAI,EAAGA,EAAI6b,EAAc3I,MAAM,CAAG,EAAGlT,IAAK,CACjD,IAAI+b,EAAcF,EAAcG,KAAK,CAAC,EAAGhc,GAAG4R,IAAI,CAAC,KAE7CmK,IAEGA,EAAY7D,QAAQ,CAAC,UAAa6D,EAAY7D,QAAQ,CAAC,WAC1D6D,CAAAA,EAAc,CAAC,EAAEA,EAAY,EAC3B,AAACA,EAAY7D,QAAQ,CAAC,KAAa,GAAN,IAC9B,MAAM,CAAC,AAAD,EAETyD,EAAY5J,IAAI,CAACgK,GAErB,CACF,CACA,OAAOJ,CACT,E,oDC1BA,IAAMM,GAAqB,sBAEpB,OAAMC,WAA2Bxa,MAGtCwO,YAA4BiM,CAAmB,CAAE,CAC/C,KAAK,CAAE,yBAAwBA,GAAAA,IAAAA,CADLA,WAAW,CAAXA,EAAAA,IAAAA,CAF5BC,MAAM,CAA8BH,EAIpC,CACF,CAEO,SAASI,GAAqBC,CAAY,QAC/C,AACiB,UAAf,OAAOA,GACPA,AAAQ,OAARA,GACE,WAAYA,GACd,AAAsB,UAAtB,OAAOA,EAAIF,MAAM,EAKZE,EAAIF,MAAM,GAAKH,EACxB,CCnBO,MAAMM,WAA8B7a,M,kBAApC,iBACW8a,IAAI,CAHU,yB,CAIhC,CCQA,MAAMC,WAAqC/a,MAGzCwO,YAA4BwM,CAAkB,CAAE,CAC9C,KAAK,CACH,CAAC,qBAAqB,EAAEA,EAAW,qGAAqG,EAAEA,EAAW,qJAAqJ,CAAC,OAFnRA,UAAU,CAAVA,EAAAA,IAAAA,CAFZN,MAAM,CAHU,2BAShC,CACF,CASO,SAASO,GACdC,CAAmB,CACnBF,CAAkB,EAElB,IAAMG,EAAiB,IAAIrb,QAAW,CAACpD,EAAG4N,KACxC4Q,EAAOE,gBAAgB,CACrB,QACA,KACE9Q,EAAO,IAAIyQ,GAA6BC,GAC1C,EACA,CAAEK,KAAM,EAAK,EAEjB,GAKA,OADAF,EAAerC,KAAK,CAACwC,IACdH,CACT,CAEA,SAASG,KAAgB,CCxClB,IAsBMC,GAAoB,AAAWC,IAIxCC,aAAaD,EAEjB,ECQME,GAAc,AAAmC,YAAnC,OAAOC,AAAAA,KAAAA,iBAAuB,CA2C3C,SAASC,GACdC,CAA2C,EAE3C,MAAO,CACLA,uBAAAA,EACAC,gBAAiB,EAAE,CACnBC,sBAAuB9c,KAAAA,EACvB+c,0BAA2B,IAC7B,CACF,CAyBO,SAASC,GACdvF,CAAgB,CAChBuC,CAAuE,CACvE+B,CAAkB,EAElB,GAAI/B,CAAAA,CAAAA,GAEAA,AAAuB,UAAvBA,EAAclX,IAAI,EAClBkX,AAAuB,mBAAvBA,EAAclX,IAAI,AAHN,GAeZ2U,CAAAA,EAAMwF,YAAY,GAAIxF,EAAMyF,WAAW,EAE3C,GAAIzF,EAAM0F,kBAAkB,CAC1B,MAAM,qBAEL,CAFK,IAAIvB,GACR,CAAC,MAAM,EAAEnE,EAAM2F,KAAK,CAAC,8EAA8E,EAAErB,EAAW,4HAA4H,CAAC,EADzO,qB,MAAA,O,WAAA,EAEN,GAGF,GAAI/B,GACF,GAAIA,AAAuB,kBAAvBA,EAAclX,IAAI,CACpBua,GACE5F,EAAM2F,KAAK,CACXrB,EACA/B,EAAcsD,eAAe,OAE1B,GAAItD,AAAuB,qBAAvBA,EAAclX,IAAI,CAAyB,CACpDkX,EAAcuD,UAAU,CAAG,EAG3B,IAAM5B,EAAM,qBAEX,CAFW,IAAIJ,GACd,CAAC,MAAM,EAAE9D,EAAM2F,KAAK,CAAC,iDAAiD,EAAErB,EAAW,2EAA2E,CAAC,EADrJ,qB,MAAA,O,WAAA,EAEZ,EAIA,OAHAtE,EAAM+F,uBAAuB,CAAGzB,EAChCtE,EAAMgG,iBAAiB,CAAG9B,EAAIzT,KAAK,CAE7ByT,CACR,MAEE3B,GACAA,AAAuB,YAAvBA,EAAclX,IAAI,EAElBkX,CAAAA,EAAc0D,WAAW,CAAG,EAAG,GAGrC,CA0BO,SAASC,GACd5B,CAAkB,CAClBtE,CAAgB,CAChBmG,CAAoC,EAGpC,IAAMjC,EAAM,qBAEX,CAFW,IAAIJ,GACd,CAAC,MAAM,EAAE9D,EAAM2F,KAAK,CAAC,mDAAmD,EAAErB,EAAW,6EAA6E,CAAC,EADzJ,qB,MAAA,O,WAAA,EAEZ,EAOA,OALA6B,EAAeL,UAAU,CAAG,EAE5B9F,EAAM+F,uBAAuB,CAAGzB,EAChCtE,EAAMgG,iBAAiB,CAAG9B,EAAIzT,KAAK,CAE7ByT,CACR,CAmGO,SAASkC,GACdT,CAAa,CACbrB,CAAkB,CAClB+B,CAAqB,CACrBF,CAAoC,EAEpC,IAAMN,EAAkBM,EAAeN,eAAe,AAatD,OAZIA,GACEA,AAA8C,OAA9CA,EAAgBP,yBAAyB,GAC3CO,EAAgBR,qBAAqB,CAAGf,EACxCuB,EAAgBP,yBAAyB,CAAGe,EACV,KAA9BF,EAAeG,UAAU,EAG3BT,CAAAA,EAAgBU,iBAAiB,CAAG,EAAG,GAI7CC,AA5EF,SACEb,CAAa,CACbrB,CAAkB,CAClB6B,CAAoC,EAIpC,IAAMjU,EAAQuU,GAFC,CAAC,MAAM,EAAEd,EAAM,iEAAiE,EAAErB,EAAW,CAAC,CAAC,EAI9G6B,EAAeO,UAAU,CAACC,KAAK,CAACzU,GAEhC,IAAM2T,EAAkBM,EAAeN,eAAe,CAClDA,GACFA,EAAgBT,eAAe,CAACzL,IAAI,CAAC,CAGnClJ,MAAOoV,EAAgBV,sBAAsB,CACzC,AAAI7b,QAAQmH,KAAK,CACjBlI,KAAAA,EACJ+b,WAAAA,CACF,EAEJ,EAsDsCqB,EAAOrB,EAAY6B,GACjDM,GACJ,CAAC,MAAM,EAAEd,EAAM,iEAAiE,EAAErB,EAAW,CAAC,CAAC,CAEnG,CAGO,IAAMsC,GA3CN,SACLvK,CAA0B,EAI1BA,EAAawK,cAAc,CAAG,EAChC,EAwDO,SAASjB,GACdD,CAAa,CACbrB,CAAkB,CAClBuB,CAA4C,EAE5CiB,AAmIF,YACE,GAAI,CAAC9B,GACH,MAAM,qBAEL,CAFK,AAAI1b,MACR,oIADI,qB,MAAA,O,WAAA,EAEN,EAEJ,KAxIMuc,GACFA,EAAgBT,eAAe,CAACzL,IAAI,CAAC,CAGnClJ,MAAOoV,EAAgBV,sBAAsB,CACzC,AAAI7b,QAAQmH,KAAK,CACjBlI,KAAAA,EACJ+b,WAAAA,CACF,GAGFW,KAAAA,iBAAuB,CAAC8B,GAAqBpB,EAAOrB,GACtD,CAEA,SAASyC,GAAqBpB,CAAa,CAAErB,CAAkB,EAC7D,MACE,CAAC,MAAM,EAAEqB,EAAM,iEAAiE,EAAErB,EAAW,kKAAE,CAAC,AAIpG,CAwBA,GAAI0C,AAAgE,KAAhEA,AAXJ,SAAiCC,CAAc,EAC7C,OACEA,EAAOC,QAAQ,CACb,oEAEFD,EAAOC,QAAQ,CACb,gEAGN,EAE4BH,GAAqB,MAAO,QACtD,MAAM,qBAEL,CAFK,AAAIzd,MACR,0FADI,qB,MAAA,O,WAAA,EAEN,GAKF,SAASmd,GAAgC5G,CAAe,EACtD,IAAM3N,EAAQ,qBAAkB,CAAlB,AAAI5I,MAAMuW,GAAV,qB,MAAA,O,WAAA,EAAiB,GAE/B,OADE3N,EAAc8R,MAAM,CAJW,6BAK1B9R,CACT,CC3ZO,SAASiV,GAAcjO,CAAkB,EAG9C,GAAI,CAACA,EAASkO,IAAI,CAChB,MAAO,CAAClO,EAAUA,EAAS,CAG7B,GAAM,CAACmO,EAAOC,EAAM,CAAGpO,EAASkO,IAAI,CAACG,GAAG,GAElCC,EAAU,IAAIC,SAASJ,EAAO,CAClCK,OAAQxO,EAASwO,MAAM,CACvBC,WAAYzO,EAASyO,UAAU,CAC/BngB,QAAS0R,EAAS1R,OAAO,AAC3B,GAEAlF,OAAOslB,cAAc,CAACJ,EAAS,MAAO,CACpC9jB,MAAOwV,EAAS2O,GAAG,AACrB,GAEA,IAAMC,EAAU,IAAIL,SAASH,EAAO,CAClCI,OAAQxO,EAASwO,MAAM,CACvBC,WAAYzO,EAASyO,UAAU,CAC/BngB,QAAS0R,EAAS1R,OAAO,AAC3B,GAMA,OAJAlF,OAAOslB,cAAc,CAACE,EAAS,MAAO,CACpCpkB,MAAOwV,EAAS2O,GAAG,AACrB,GAEO,CAACL,EAASM,EAAQ,AAC3B,CD+iByB,AAAIC,OAC3B,8CAA6C,EAEtB,AAAIA,OAC3B,8CAA6C,EAExB,AAAIA,OAAO,4CAA2C,EEhjBtE,IAAWC,GAAeA,SAAfA,CAAe,E,2HAAfA,C,MA2IAC,GAAoBA,SAApBA,CAAoB,E,qGAApBA,C,KCpLX,OAAMC,GAKXpQ,aAAc,CACZ,IAAInE,EACAC,CAGJ,KAAI,CAACkN,OAAO,CAAG,IAAI1X,QAAW,CAAC+e,EAAKC,KAClCzU,EAAUwU,EACVvU,EAASwU,CACX,GAIA,IAAI,CAACzU,OAAO,CAAGA,EACf,IAAI,CAACC,MAAM,CAAGA,CAChB,CACF,CC1BO,IAAMyU,GAAe,CAE1BC,QAAS,CAEPC,KAAM,IAAIC,WAAW,CAAC,GAAI,IAAK,IAAK,IAAK,IAAI,EAE7CC,KAAM,IAAID,WAAW,CAAC,GAAI,GAAI,IAAK,IAAK,IAAI,CAC9C,EACAE,OAAQ,CAENC,KAAM,IAAIH,WAAW,CAAC,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,GAAG,EAEpDC,KAAM,IAAID,WAAW,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAG,EAEpDD,KAAM,IAAIC,WAAW,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAG,EAErDI,cAAe,IAAIJ,WAAW,CAC5B,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAC5D,CACH,CACF,ECjBO,SAASK,GAAkBhhB,CAAa,CAAEihB,CAAa,EAC5D,GAAIA,AAAa,IAAbA,EAAEhO,MAAM,CAAQ,OAAO,EAC3B,GAAIjT,AAAa,IAAbA,EAAEiT,MAAM,EAAUgO,EAAEhO,MAAM,CAAGjT,EAAEiT,MAAM,CAAE,OAAO,GAGlD,IAAK,IAAIlT,EAAI,EAAGA,GAAKC,EAAEiT,MAAM,CAAGgO,EAAEhO,MAAM,CAAElT,IAAK,CAC7C,IAAImhB,EAAgB,GAEpB,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAEhO,MAAM,CAAEkO,IAE5B,GAAInhB,CAAC,CAACD,EAAIohB,EAAE,GAAKF,CAAC,CAACE,EAAE,CAAE,CACrBD,EAAgB,GAChB,KACF,CAGF,GAAIA,EACF,OAAOnhB,CAEX,CAEA,OAAO,EACT,CCdA,SAASqhB,KAIT,CASA,IAAMC,GAAU,IAAIC,YAmDb,SAASC,GAAiBC,CAAa,EAC5C,OAAO,IAAIC,eAAe,CACxB1iB,MAAM8f,CAAU,EACdA,EAAW6C,OAAO,CAACF,GACnB3C,EAAW8C,KAAK,EAClB,CACF,EACF,CAEO,eAAeC,GACpBC,CAAkC,EAElC,IAAMC,EAASD,EAAOE,SAAS,GACzBC,EAAuB,EAAE,CAE/B,OAAa,CACX,GAAM,CAAEC,KAAAA,CAAI,CAAEpmB,MAAAA,CAAK,CAAE,CAAG,MAAMimB,EAAOI,IAAI,GACzC,GAAID,EACF,MAGFD,EAAOlQ,IAAI,CAACjW,EACd,CAEA,OAAOsmB,OAAOC,MAAM,CAACJ,EACvB,CAEO,eAAeK,GACpBR,CAAkC,CAClClF,CAAoB,EAEpB,IAAM2F,EAAU,IAAIC,YAAY,QAAS,CAAEC,MAAO,EAAK,GACnDvmB,EAAS,GAEb,UAAW,IAAMulB,KAASK,EAAQ,CAChC,GAAIlF,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAQ8F,OAAO,CACjB,OAAOxmB,EAGTA,GAAUqmB,EAAQI,MAAM,CAAClB,EAAO,CAAEK,OAAQ,EAAK,EACjD,CAIA,OAFA5lB,EAAUqmB,EAAQI,MAAM,EAG1B,CC7GO,IAAMC,GAAoB3kB,OAAO2U,GAAG,CAAC,2BCJrC,SAASiQ,GAAoB9E,CAAa,EAC/C,OAAOA,EAAMre,OAAO,CAAC,MAAO,KAAO,GACrC,CCJO,SAASojB,GAAUrmB,CAAY,EACpC,IAAMsmB,EAAYtmB,EAAKumB,OAAO,CAAC,KACzBC,EAAaxmB,EAAKumB,OAAO,CAAC,KAC1BE,EAAWD,EAAa,IAAOF,CAAAA,EAAY,GAAKE,EAAaF,CAAQ,SAE3E,AAAIG,GAAYH,EAAY,GACnB,CACLrH,SAAUjf,EAAKsb,SAAS,CAAC,EAAGmL,EAAWD,EAAaF,GACpDI,MAAOD,EACHzmB,EAAKsb,SAAS,CAACkL,EAAYF,EAAY,GAAKA,EAAYpiB,KAAAA,GACxD,GACJyiB,KAAML,EAAY,GAAKtmB,EAAKuf,KAAK,CAAC+G,GAAa,EACjD,EAGK,CAAErH,SAAUjf,EAAM0mB,MAAO,GAAIC,KAAM,EAAG,CAC/C,CCfO,SAASC,GAAc5mB,CAAY,CAAEoI,CAAe,EACzD,GAAI,CAACpI,EAAKmf,UAAU,CAAC,MAAQ,CAAC/W,EAC5B,OAAOpI,EAGT,GAAM,CAAEif,SAAAA,CAAQ,CAAEyH,MAAAA,CAAK,CAAEC,KAAAA,CAAI,CAAE,CAAGN,GAAUrmB,GAC5C,MAAQ,GAAEoI,EAAS6W,EAAWyH,EAAQC,CACxC,CCNO,SAASE,GAAc7mB,CAAY,CAAEsI,CAAe,EACzD,GAAI,CAACtI,EAAKmf,UAAU,CAAC,MAAQ,CAAC7W,EAC5B,OAAOtI,EAGT,GAAM,CAAEif,SAAAA,CAAQ,CAAEyH,MAAAA,CAAK,CAAEC,KAAAA,CAAI,CAAE,CAAGN,GAAUrmB,GAC5C,MAAQ,GAAEif,EAAW3W,EAASoe,EAAQC,CACxC,CCLO,SAASG,GAAc9mB,CAAY,CAAEoI,CAAc,EACxD,GAAI,AAAgB,UAAhB,OAAOpI,EACT,MAAO,GAGT,GAAM,CAAEif,SAAAA,CAAQ,CAAE,CAAGoH,GAAUrmB,GAC/B,OAAOif,IAAa7W,GAAU6W,EAASE,UAAU,CAAC/W,EAAS,IAC7D,CCNA,IAAM2e,GAAQ,IAAI3W,QAWX,SAAS4W,GACd/H,CAAgB,CAChBgI,CAA2B,MAYvBC,EATJ,GAAI,CAACD,EAAS,MAAO,CAAEhI,SAAAA,CAAS,EAGhC,IAAIkI,EAAoBJ,GAAMhT,GAAG,CAACkT,GAC7BE,IACHA,EAAoBF,EAAQjoB,GAAG,CAAC,AAACooB,GAAWA,EAAOxS,WAAW,IAC9DmS,GAAM5S,GAAG,CAAC8S,EAASE,IAOrB,IAAME,EAAWpI,EAASI,KAAK,CAAC,IAAK,GAIrC,GAAI,CAACgI,CAAQ,CAAC,EAAE,CAAE,MAAO,CAAEpI,SAAAA,CAAS,EAGpC,IAAMqI,EAAUD,CAAQ,CAAC,EAAE,CAACzS,WAAW,GAIjCpI,EAAQ2a,EAAkBZ,OAAO,CAACe,UACxC,AAAI9a,EAAQ,EAAU,CAAEyS,SAAAA,CAAS,GAGjCiI,EAAiBD,CAAO,CAACza,EAAM,CAKxB,CAAEyS,SAFTA,EAAWA,EAASM,KAAK,CAAC2H,EAAezQ,MAAM,CAAG,IAAM,IAErCyQ,eAAAA,CAAe,EACpC,CCvCA,IAAMK,GACJ,2FAEF,SAASC,GAAShE,CAAiB,CAAEiE,CAAmB,EACtD,OAAO,IAAIC,IACT5Z,OAAO0V,GAAKvgB,OAAO,CAACskB,GAA0B,aAC9CE,GAAQ3Z,OAAO2Z,GAAMxkB,OAAO,CAACskB,GAA0B,aAE3D,CAEA,IAAMI,GAAWnmB,OAAO,kBAEjB,OAAMomB,GAeXnU,YACEoU,CAAmB,CACnBC,CAAmC,CACnCC,CAAc,CACd,CACA,IAAIN,EACApkB,CAGD,AAAsB,WAAtB,OAAOykB,GAA2B,aAAcA,GACjD,AAAsB,UAAtB,OAAOA,GAEPL,EAAOK,EACPzkB,EAAU0kB,GAAQ,CAAC,GAEnB1kB,EAAU0kB,GAAQD,GAAc,CAAC,EAGnC,IAAI,CAACH,GAAS,CAAG,CACfnE,IAAKgE,GAASK,EAAOJ,GAAQpkB,EAAQokB,IAAI,EACzCpkB,QAASA,EACT2kB,SAAU,EACZ,EAEA,IAAI,CAACC,OAAO,EACd,CAEQA,SAAU,C,IAcV,IAKJ,EACA,IAnBF,IAAMhc,EAAOic,ACxBV,SACLjJ,CAAgB,CAChB5b,CAAgB,MAE0BA,EAyCxBvB,EAzClB,GAAM,CAAEkmB,SAAAA,CAAQ,CAAEG,KAAAA,CAAI,CAAEC,cAAAA,CAAa,CAAE,CAAG/kB,AAAkB,MAAlBA,CAAAA,EAAAA,EAAQglB,UAAU,AAAD,EAAjBhlB,EAAsB,CAAC,EAC3D4I,EAAyB,CAC7BgT,SAAAA,EACAmJ,cAAenJ,AAAa,MAAbA,EAAmBA,EAASxD,QAAQ,CAAC,KAAO2M,CAC7D,EAEIJ,GAAYlB,GAAc7a,EAAKgT,QAAQ,CAAE+I,KAC3C/b,EAAKgT,QAAQ,CAAGqJ,ACrDb,SAA0BtoB,CAAY,CAAEoI,CAAc,EAa3D,GAAI,CAAC0e,GAAc9mB,EAAMoI,GACvB,OAAOpI,EAIT,IAAMuoB,EAAgBvoB,EAAKuf,KAAK,CAACnX,EAAOqO,MAAM,SAG9C,AAAI8R,EAAcpJ,UAAU,CAAC,KACpBoJ,EAKD,IAAGA,CACb,EDyBqCtc,EAAKgT,QAAQ,CAAE+I,GAChD/b,EAAK+b,QAAQ,CAAGA,GAElB,IAAIQ,EAAuBvc,EAAKgT,QAAQ,CAExC,GACEhT,EAAKgT,QAAQ,CAACE,UAAU,CAAC,iBACzBlT,EAAKgT,QAAQ,CAACxD,QAAQ,CAAC,SACvB,CACA,IAAMgN,EAAQxc,EAAKgT,QAAQ,CACxBhc,OAAO,CAAC,mBAAoB,IAC5BA,OAAO,CAAC,UAAW,IACnBoc,KAAK,CAAC,KAEHqJ,EAAUD,CAAK,CAAC,EAAE,AACxBxc,CAAAA,EAAKyc,OAAO,CAAGA,EACfF,EACEC,AAAa,UAAbA,CAAK,CAAC,EAAE,CAAgB,IAAGA,EAAMlJ,KAAK,CAAC,GAAGpK,IAAI,CAAC,KAAS,IAIhC,KAAtB9R,EAAQslB,SAAS,EACnB1c,CAAAA,EAAKgT,QAAQ,CAAGuJ,CAAmB,CAEvC,CAIA,GAAIL,EAAM,CACR,IAAIrmB,EAASuB,EAAQulB,YAAY,CAC7BvlB,EAAQulB,YAAY,CAACX,OAAO,CAAChc,EAAKgT,QAAQ,EAC1C+H,GAAoB/a,EAAKgT,QAAQ,CAAEkJ,EAAKlB,OAAO,CAEnDhb,CAAAA,EAAKmb,MAAM,CAAGtlB,EAAOolB,cAAc,CACnCjb,EAAKgT,QAAQ,CAAGnd,AAAe,MAAfA,CAAAA,EAAAA,EAAOmd,QAAQ,AAAD,EAAdnd,EAAmBmK,EAAKgT,QAAQ,CAE5C,CAACnd,EAAOolB,cAAc,EAAIjb,EAAKyc,OAAO,EAKpC5mB,AAJJA,CAAAA,EAASuB,EAAQulB,YAAY,CACzBvlB,EAAQulB,YAAY,CAACX,OAAO,CAACO,GAC7BxB,GAAoBwB,EAAsBL,EAAKlB,OAAO,GAE/CC,cAAc,EACvBjb,CAAAA,EAAKmb,MAAM,CAAGtlB,EAAOolB,cAAc,AAAD,CAGxC,CACA,OAAOjb,CACT,EDlCqC,IAAI,CAAC0b,GAAS,CAACnE,GAAG,CAACvE,QAAQ,CAAE,CAC5DoJ,WAAY,IAAI,CAACV,GAAS,CAACtkB,OAAO,CAACglB,UAAU,CAC7CM,UAAW,CAACpY,QAAQsY,GAAG,CAACC,kCAAkC,CAC1DF,aAAc,IAAI,CAACjB,GAAS,CAACtkB,OAAO,CAACulB,YAAY,AACnD,GAEMG,EAAWC,AG1Ed,SACLjmB,CAAoC,CACpCI,CAA6B,EAI7B,IAAI4lB,EACJ,GAAI5lB,AAAAA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAS8lB,IAAI,AAAD,GAAK,CAACvnB,MAAMwT,OAAO,CAAC/R,EAAQ8lB,IAAI,EAC9CF,EAAW5lB,EAAQ8lB,IAAI,CAACtR,QAAQ,GAAG0H,KAAK,CAAC,IAAK,EAAE,CAAC,EAAE,MAC9C,IAAItc,EAAOgmB,QAAQ,CAEnB,OADLA,EAAWhmB,EAAOgmB,QAAQ,CAG5B,OAAOA,EAASnU,WAAW,EAC7B,EH6DM,IAAI,CAAC+S,GAAS,CAACnE,GAAG,CAClB,IAAI,CAACmE,GAAS,CAACtkB,OAAO,CAACF,OAAO,CAEhC,KAAI,CAACwkB,GAAS,CAACuB,YAAY,CAAG,IAAI,CAACvB,GAAS,CAACtkB,OAAO,CAACulB,YAAY,CAC7D,IAAI,CAACjB,GAAS,CAACtkB,OAAO,CAACulB,YAAY,CAACO,kBAAkB,CAACJ,GACvDI,AItFD,SACLC,CAAqC,CACrCL,CAAiB,CACjB7B,CAAuB,EAEvB,GAAKkC,EAML,IAAK,IAAMC,KAJPnC,GACFA,CAAAA,EAAiBA,EAAetS,WAAW,EAAC,EAG3BwU,GAAa,C,IAEPC,EAIrBA,EAHF,GACEN,IAFqB,CAAW,MAAXM,CAAAA,EAAAA,EAAKzpB,MAAM,AAAD,EAAC,OAAXypB,EAAahK,KAAK,CAAC,IAAK,EAAE,CAAC,EAAE,CAACzK,WAAW,EAAC,GAG/DsS,IAAmBmC,EAAKC,aAAa,CAAC1U,WAAW,KACrC,MAAZyU,CAAAA,EAAAA,EAAKpC,OAAO,AAAD,EAAC,OAAZoC,EAAcE,IAAI,CAAC,AAACnC,GAAWA,EAAOxS,WAAW,KAAOsS,EAAc,EAEtE,OAAOmC,CAEX,CACF,EJgE2B,AACgB,MAAjC,OAAI,CAAC1B,GAAS,CAACtkB,OAAO,CAACglB,UAAU,AAAD,EAAC,OAAM,MAAvC,KAAmCF,IAAI,AAAD,EAAC,OAAvC,EAAyCqB,OAAO,CAChDT,GAGN,IAAMO,EACJ,CAA2B,MAA3B,OAAI,CAAC3B,GAAS,CAACuB,YAAY,AAAD,EAAC,OAA3B,EAA6BI,aAAa,AAAD,GAAC,CACT,MAAjC,OAAI,CAAC3B,GAAS,CAACtkB,OAAO,CAACglB,UAAU,AAAD,EAAC,OAAM,MAAvC,KAAmCF,IAAI,AAAD,EAAC,OAAvC,EAAyCmB,aAAa,AAAD,CAEvD,KAAI,CAAC3B,GAAS,CAACnE,GAAG,CAACvE,QAAQ,CAAGhT,EAAKgT,QAAQ,CAC3C,IAAI,CAAC0I,GAAS,CAAC2B,aAAa,CAAGA,EAC/B,IAAI,CAAC3B,GAAS,CAACK,QAAQ,CAAG/b,EAAK+b,QAAQ,EAAI,GAC3C,IAAI,CAACL,GAAS,CAACe,OAAO,CAAGzc,EAAKyc,OAAO,CACrC,IAAI,CAACf,GAAS,CAACP,MAAM,CAAGnb,EAAKmb,MAAM,EAAIkC,EACvC,IAAI,CAAC3B,GAAS,CAACS,aAAa,CAAGnc,EAAKmc,aAAa,AACnD,CAEQqB,gBAAiB,KK9FYxd,MACjCgT,EL8FF,OK9FEA,EAAWyK,ACJV,SACL1pB,CAAY,CACZonB,CAAuB,CACvBkC,CAAsB,CACtBK,CAAsB,EAItB,GAAI,CAACvC,GAAUA,IAAWkC,EAAe,OAAOtpB,EAEhD,IAAM4pB,EAAQ5pB,EAAK4U,WAAW,SAI9B,AAAI,CAAC+U,IACC7C,GAAc8C,EAAO,SACrB9C,GAAc8C,EAAQ,IAAGxC,EAAOxS,WAAW,KADN5U,EAKpC4mB,GAAc5mB,EAAO,IAAGonB,EACjC,EDhBInb,CAFmCA,EL+FL,CAC5B+b,SAAU,IAAI,CAACL,GAAS,CAACK,QAAQ,CACjCU,QAAS,IAAI,CAACf,GAAS,CAACe,OAAO,CAC/BY,cAAe,AAAC,IAAI,CAAC3B,GAAS,CAACtkB,OAAO,CAACwmB,WAAW,CAE9C3lB,KAAAA,EADA,IAAI,CAACyjB,GAAS,CAAC2B,aAAa,CAEhClC,OAAQ,IAAI,CAACO,GAAS,CAACP,MAAM,CAC7BnI,SAAU,IAAI,CAAC0I,GAAS,CAACnE,GAAG,CAACvE,QAAQ,CACrCmJ,cAAe,IAAI,CAACT,GAAS,CAACS,aAAa,AAC7C,GKtGKnJ,QAAQ,CACbhT,EAAKmb,MAAM,CACXnb,EAAKyc,OAAO,CAAGxkB,KAAAA,EAAY+H,EAAKqd,aAAa,CAC7Crd,EAAK0d,YAAY,EAGf1d,CAAAA,EAAKyc,OAAO,EAAI,CAACzc,EAAKmc,aAAa,AAAD,GACpCnJ,CAAAA,EAAWmH,GAAoBnH,EAAQ,EAGrChT,EAAKyc,OAAO,EACdzJ,CAAAA,EAAW4H,GACTD,GAAc3H,EAAW,eAAchT,EAAKyc,OAAO,EACnDzc,AAAkB,MAAlBA,EAAKgT,QAAQ,CAAW,aAAe,QAAO,EAIlDA,EAAW2H,GAAc3H,EAAUhT,EAAK+b,QAAQ,EACzC,CAAC/b,EAAKyc,OAAO,EAAIzc,EAAKmc,aAAa,CACtC,AAACnJ,EAASxD,QAAQ,CAAC,KAEjBwD,EADA4H,GAAc5H,EAAU,KAE1BmH,GAAoBnH,ELiFxB,CAEQ6K,cAAe,CACrB,OAAO,IAAI,CAACnC,GAAS,CAACnE,GAAG,CAACuG,MAAM,AAClC,CAEA,IAAWrB,SAAU,CACnB,OAAO,IAAI,CAACf,GAAS,CAACe,OAAO,AAC/B,CAEA,IAAWA,QAAQA,CAA2B,CAAE,CAC9C,IAAI,CAACf,GAAS,CAACe,OAAO,CAAGA,CAC3B,CAEA,IAAWtB,QAAS,CAClB,OAAO,IAAI,CAACO,GAAS,CAACP,MAAM,EAAI,EAClC,CAEA,IAAWA,OAAOA,CAAc,CAAE,C,IAG7B,IAFH,GACE,CAAC,IAAI,CAACO,GAAS,CAACP,MAAM,EACtB,EAAkC,MAAjC,OAAI,CAACO,GAAS,CAACtkB,OAAO,CAACglB,UAAU,AAAD,EAAC,OAAM,MAAvC,KAAmCF,IAAI,AAAD,EAAC,OAAvC,EAAyClB,OAAO,CAACpE,QAAQ,CAACuE,EAAM,EAEjE,MAAM,qBAEL,CAFK,AAAIxjB,UACR,CAAC,8CAA8C,EAAEwjB,EAAO,CAAC,CAAC,EADtD,qB,MAAA,O,WAAA,EAEN,EAGF,KAAI,CAACO,GAAS,CAACP,MAAM,CAAGA,CAC1B,CAEA,IAAIkC,eAAgB,CAClB,OAAO,IAAI,CAAC3B,GAAS,CAAC2B,aAAa,AACrC,CAEA,IAAIJ,cAAe,CACjB,OAAO,IAAI,CAACvB,GAAS,CAACuB,YAAY,AACpC,CAEA,IAAIc,cAAe,CACjB,OAAO,IAAI,CAACrC,GAAS,CAACnE,GAAG,CAACwG,YAAY,AACxC,CAEA,IAAIf,MAAO,CACT,OAAO,IAAI,CAACtB,GAAS,CAACnE,GAAG,CAACyF,IAAI,AAChC,CAEA,IAAIA,KAAK5pB,CAAa,CAAE,CACtB,IAAI,CAACsoB,GAAS,CAACnE,GAAG,CAACyF,IAAI,CAAG5pB,CAC5B,CAEA,IAAI0pB,UAAW,CACb,OAAO,IAAI,CAACpB,GAAS,CAACnE,GAAG,CAACuF,QAAQ,AACpC,CAEA,IAAIA,SAAS1pB,CAAa,CAAE,CAC1B,IAAI,CAACsoB,GAAS,CAACnE,GAAG,CAACuF,QAAQ,CAAG1pB,CAChC,CAEA,IAAI4qB,MAAO,CACT,OAAO,IAAI,CAACtC,GAAS,CAACnE,GAAG,CAACyG,IAAI,AAChC,CAEA,IAAIA,KAAK5qB,CAAa,CAAE,CACtB,IAAI,CAACsoB,GAAS,CAACnE,GAAG,CAACyG,IAAI,CAAG5qB,CAC5B,CAEA,IAAI6qB,UAAW,CACb,OAAO,IAAI,CAACvC,GAAS,CAACnE,GAAG,CAAC0G,QAAQ,AACpC,CAEA,IAAIA,SAAS7qB,CAAa,CAAE,CAC1B,IAAI,CAACsoB,GAAS,CAACnE,GAAG,CAAC0G,QAAQ,CAAG7qB,CAChC,CAEA,IAAI8qB,MAAO,CACT,IAAMlL,EAAW,IAAI,CAACwK,cAAc,GAC9BM,EAAS,IAAI,CAACD,YAAY,GAChC,MAAO,CAAC,EAAE,IAAI,CAACI,QAAQ,CAAC,EAAE,EAAE,IAAI,CAACjB,IAAI,CAAC,EAAEhK,EAAS,EAAE8K,EAAO,EAAE,IAAI,CAACpD,IAAI,CAAC,CAAC,AACzE,CAEA,IAAIwD,KAAK3G,CAAW,CAAE,CACpB,IAAI,CAACmE,GAAS,CAACnE,GAAG,CAAGgE,GAAShE,GAC9B,IAAI,CAACyE,OAAO,EACd,CAEA,IAAImC,QAAS,CACX,OAAO,IAAI,CAACzC,GAAS,CAACnE,GAAG,CAAC4G,MAAM,AAClC,CAEA,IAAInL,UAAW,CACb,OAAO,IAAI,CAAC0I,GAAS,CAACnE,GAAG,CAACvE,QAAQ,AACpC,CAEA,IAAIA,SAAS5f,CAAa,CAAE,CAC1B,IAAI,CAACsoB,GAAS,CAACnE,GAAG,CAACvE,QAAQ,CAAG5f,CAChC,CAEA,IAAIsnB,MAAO,CACT,OAAO,IAAI,CAACgB,GAAS,CAACnE,GAAG,CAACmD,IAAI,AAChC,CAEA,IAAIA,KAAKtnB,CAAa,CAAE,CACtB,IAAI,CAACsoB,GAAS,CAACnE,GAAG,CAACmD,IAAI,CAAGtnB,CAC5B,CAEA,IAAI0qB,QAAS,CACX,OAAO,IAAI,CAACpC,GAAS,CAACnE,GAAG,CAACuG,MAAM,AAClC,CAEA,IAAIA,OAAO1qB,CAAa,CAAE,CACxB,IAAI,CAACsoB,GAAS,CAACnE,GAAG,CAACuG,MAAM,CAAG1qB,CAC9B,CAEA,IAAIgrB,UAAW,CACb,OAAO,IAAI,CAAC1C,GAAS,CAACnE,GAAG,CAAC6G,QAAQ,AACpC,CAEA,IAAIA,SAAShrB,CAAa,CAAE,CAC1B,IAAI,CAACsoB,GAAS,CAACnE,GAAG,CAAC6G,QAAQ,CAAGhrB,CAChC,CAEA,IAAIirB,UAAW,CACb,OAAO,IAAI,CAAC3C,GAAS,CAACnE,GAAG,CAAC8G,QAAQ,AACpC,CAEA,IAAIA,SAASjrB,CAAa,CAAE,CAC1B,IAAI,CAACsoB,GAAS,CAACnE,GAAG,CAAC8G,QAAQ,CAAGjrB,CAChC,CAEA,IAAI2oB,UAAW,CACb,OAAO,IAAI,CAACL,GAAS,CAACK,QAAQ,AAChC,CAEA,IAAIA,SAAS3oB,CAAa,CAAE,CAC1B,IAAI,CAACsoB,GAAS,CAACK,QAAQ,CAAG3oB,EAAM8f,UAAU,CAAC,KAAO9f,EAAQ,CAAC,CAAC,EAAEA,EAAM,CAAC,AACvE,CAEAsY,UAAW,CACT,OAAO,IAAI,CAACwS,IAAI,AAClB,CAEAI,QAAS,CACP,OAAO,IAAI,CAACJ,IAAI,AAClB,CAEA,CAAC3oB,OAAO2U,GAAG,CAAC,+BAA+B,EAAG,CAC5C,MAAO,CACLgU,KAAM,IAAI,CAACA,IAAI,CACfC,OAAQ,IAAI,CAACA,MAAM,CACnBF,SAAU,IAAI,CAACA,QAAQ,CACvBI,SAAU,IAAI,CAACA,QAAQ,CACvBD,SAAU,IAAI,CAACA,QAAQ,CACvBpB,KAAM,IAAI,CAACA,IAAI,CACfF,SAAU,IAAI,CAACA,QAAQ,CACvBkB,KAAM,IAAI,CAACA,IAAI,CACfhL,SAAU,IAAI,CAACA,QAAQ,CACvB8K,OAAQ,IAAI,CAACA,MAAM,CACnBC,aAAc,IAAI,CAACA,YAAY,CAC/BrD,KAAM,IAAI,CAACA,IAAI,AACjB,CACF,CAEA6D,OAAQ,CACN,OAAO,IAAI5C,GAAQ9Z,OAAO,IAAI,EAAG,IAAI,CAAC6Z,GAAS,CAACtkB,OAAO,CACzD,CACF,COpRyB7B,OAAO,oBAOCipB,QA0B9BjpB,OAAO2U,GAAG,CAAC,+BC7BP,IAAMuU,GAAsB,iBAC5B,OAAMC,WAAwB1lB,M,kBAA9B,iBACWvF,IAAI,CAAGgrB,E,CACzB,CCZA,IAAIE,GAA2B,EAC3BC,GAA2B,EAC3BC,GAA2B,ECQxB,SAASC,GAAaznB,CAAM,EACjC,MAAOA,AAAAA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAG5D,IAAI,AAAD,IAAM,cAAgB4D,AAAAA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAG5D,IAAI,AAAD,IAAMgrB,EACjD,CA6GO,eAAeM,GACpBC,CAAoC,CACpCnH,CAAmB,CACnBoH,CAAkC,EAElC,GAAI,CAEF,GAAM,CAAEC,QAAAA,CAAO,CAAEC,UAAAA,CAAS,CAAE,CAAGtH,EAC/B,GAAIqH,GAAWC,EAAW,OAI1B,IAAM/I,EAAagJ,AFhHhB,SAA+BC,CAAkB,EACtD,IAAMjJ,EAAa,IAAIkJ,gBAWvB,OANAD,EAAShL,IAAI,CAAC,QAAS,KACjBgL,EAASE,gBAAgB,EAE7BnJ,EAAWC,KAAK,CAAC,IAAIqI,GACvB,GAEOtI,CACT,EEmG6CyB,GAEnC2H,EAASC,AAzHnB,SACE5H,CAAmB,CACnBoH,CAAkC,EAElC,IAAIS,EAAU,GAIVC,EAAU,IAAI/H,GAClB,SAASgI,IACPD,EAAQtc,OAAO,EACjB,CACAwU,EAAIgI,EAAE,CAAC,QAASD,GAIhB/H,EAAIxD,IAAI,CAAC,QAAS,KAChBwD,EAAIiI,GAAG,CAAC,QAASF,GACjBD,EAAQtc,OAAO,EACjB,GAIA,IAAM0c,EAAW,IAAInI,GAMrB,OALAC,EAAIxD,IAAI,CAAC,SAAU,KACjB0L,EAAS1c,OAAO,EAClB,GAGO,IAAI2c,eAA2B,CACpCC,MAAO,MAAOlH,IAIZ,GAAI,CAAC2G,EAAS,CAGZ,GAFAA,EAAU,GAGR,gBAAiBpY,YACjBhD,QAAQsY,GAAG,CAACsD,4BAA4B,CACxC,CACA,IAAMC,EAAUC,ADpBnB,SACLhpB,EAA+B,CAAC,CAAC,EAEjC,IAAM+oB,EACJxB,AAA6B,IAA7BA,GACI1mB,KAAAA,EACA,CACE0mB,yBAAAA,GACAC,yBAAAA,GACAC,yBAAAA,EACF,EAQN,OANIznB,EAAQipB,KAAK,GACf1B,GAA2B,EAC3BC,GAA2B,EAC3BC,GAA2B,GAGtBsB,CACT,ICEcA,GACFG,YAAYC,OAAO,CACjB,CAAC,EAAEjc,QAAQsY,GAAG,CAACsD,4BAA4B,CAAC,8BAA8B,CAAC,CAC3E,CACE5pB,MAAO6pB,EAAQxB,wBAAwB,CACvC6B,IACEL,EAAQxB,wBAAwB,CAChCwB,EAAQvB,wBAAwB,AACpC,EAGN,CAEA/G,EAAI4I,YAAY,GAChBC,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,IAAYC,KAAK,CACfpT,EAAAA,aAAgC,CAChC,CACEqT,SAAU,gBACZ,EACA,IAAM3oB,KAAAA,EAEV,CAEA,GAAI,CACF,IAAM4oB,EAAKhJ,EAAIoI,KAAK,CAAClH,EAIjB,WAAWlB,GAAO,AAAqB,YAArB,OAAOA,EAAIiJ,KAAK,EACpCjJ,EAAIiJ,KAAK,GAKND,IACH,MAAMlB,EAAQnP,OAAO,CAGrBmP,EAAU,IAAI/H,GAElB,CAAE,MAAOhE,EAAK,CAEZ,MADAiE,EAAI2I,GAAG,GACD,qBAA8D,CAA9D,AAAIxnB,MAAM,oCAAqC,CAAE6Z,MAAOe,CAAI,GAA5D,qB,MAAA,O,WAAA,EAA6D,EACrE,CACF,EACAyC,MAAO,AAACzC,IACFiE,EAAI0H,gBAAgB,EAExB1H,EAAIkJ,OAAO,CAACnN,EACd,EACAsF,MAAO,UAOL,GAJI+F,GACF,MAAMA,GAGJpH,EAAI0H,gBAAgB,CAGxB,OADA1H,EAAI2I,GAAG,GACAT,EAASvP,OAAO,AACzB,CACF,EACF,EAgB4CqH,EAAKoH,EAE7C,OAAMD,EAASgC,MAAM,CAACxB,EAAQ,CAAEtL,OAAQkC,EAAWlC,MAAM,AAAC,EAC5D,CAAE,MAAON,EAAU,CAEjB,GAAIkL,GAAalL,GAAM,MAEvB,OAAM,qBAAoD,CAApD,AAAI5a,MAAM,0BAA2B,CAAE6Z,MAAOe,CAAI,GAAlD,qB,MAAA,O,WAAA,EAAmD,EAC3D,CACF,CCvEe,MAAMqN,GA6BnB,OAAcC,WAAW9tB,CAAsB,CAAE,CAC/C,OAAO,IAAI6tB,GAAyC7tB,EAAO,CAAE+tB,SAAU,CAAC,CAAE,EAC5E,CAIA3Z,YACE6X,CAA8B,CAC9B,CAAE+B,YAAAA,CAAW,CAAEhQ,UAAAA,CAAS,CAAE+P,SAAAA,CAAQ,CAAiC,CACnE,CACA,IAAI,CAAC9B,QAAQ,CAAGA,EAChB,IAAI,CAAC+B,WAAW,CAAGA,EACnB,IAAI,CAACD,QAAQ,CAAGA,EAChB,IAAI,CAAC/P,SAAS,CAAGA,CACnB,CAEOiQ,eAAeF,CAAkB,CAAE,CACxCnvB,OAAOsM,MAAM,CAAC,IAAI,CAAC6iB,QAAQ,CAAEA,EAC/B,CAMA,IAAWG,QAAkB,CAC3B,OAAO,AAAkB,OAAlB,IAAI,CAACjC,QAAQ,AACtB,CAMA,IAAWkC,WAAqB,CAC9B,MAAO,AAAyB,UAAzB,OAAO,IAAI,CAAClC,QAAQ,AAC7B,CAIOmC,kBAAkBpI,EAAS,EAAK,CAA4B,CACjE,GAAI,AAAkB,OAAlB,IAAI,CAACiG,QAAQ,CACf,MAAM,qBAA0D,CAA1D,AAAIrmB,MAAM,iDAAV,qB,MAAA,O,WAAA,EAAyD,GAGjE,GAAI,AAAyB,UAAzB,OAAO,IAAI,CAACqmB,QAAQ,CAAe,CACrC,GAAI,CAACjG,EACH,MAAM,qBAEL,CAFK,AAAIpgB,MACR,8EADI,qB,MAAA,M,WAAA,EAEN,GAGF,OAAOmgB,GAAe,IAAI,CAAC6F,QAAQ,CACrC,CAEA,OAAOtF,OAAOxkB,IAAI,CAAC,IAAI,CAACmqB,QAAQ,CAClC,CAWOoC,kBAAkBrI,EAAS,EAAK,CAA4B,CACjE,GAAI,AAAkB,OAAlB,IAAI,CAACiG,QAAQ,CACf,MAAM,qBAA0D,CAA1D,AAAIrmB,MAAM,iDAAV,qB,MAAA,O,WAAA,EAAyD,GAGjE,GAAI,AAAyB,UAAzB,OAAO,IAAI,CAACqmB,QAAQ,CAAe,CACrC,GAAI,CAACjG,EACH,MAAM,qBAEL,CAFK,AAAIpgB,MACR,8EADI,qB,MAAA,M,WAAA,EAEN,GAGF,OAAO4gB,GAAe,IAAI,CAACoF,QAAQ,CACrC,CAEA,OAAO,IAAI,CAACK,QAAQ,AACtB,CAMA,IAAYL,UAAuC,CACjD,GAAI,AAAkB,OAAlB,IAAI,CAACK,QAAQ,CACf,MAAM,qBAAyD,CAAzD,AAAIrmB,MAAM,gDAAV,qB,MAAA,M,WAAA,EAAwD,GAEhE,GAAI,AAAyB,UAAzB,OAAO,IAAI,CAACqmB,QAAQ,CACtB,MAAM,qBAA2D,CAA3D,AAAIrmB,MAAM,kDAAV,qB,MAAA,O,WAAA,EAA0D,UAGlE,AAAI0gB,OAAOgI,QAAQ,CAAC,IAAI,CAACrC,QAAQ,EACxBvG,GAAiB,IAAI,CAACuG,QAAQ,EAInC5pB,MAAMwT,OAAO,CAAC,IAAI,CAACoW,QAAQ,EACtBsC,AnBlLN,SACL,GAAGC,CAA4B,EAI/B,GAAIA,AAAmB,IAAnBA,EAAQpX,MAAM,CAChB,MAAM,qBAAiE,CAAjE,AAAIxR,MAAM,wDAAV,qB,MAAA,O,WAAA,EAAgE,GAIxE,GAAI4oB,AAAmB,IAAnBA,EAAQpX,MAAM,CAChB,OAAOoX,CAAO,CAAC,EAAE,CAGnB,GAAM,CAAE5C,SAAAA,CAAQ,CAAE6C,SAAAA,CAAQ,CAAE,CAAG,IAAIC,gBAI/BtR,EAAUoR,CAAO,CAAC,EAAE,CAACZ,MAAM,CAACa,EAAU,CAAEE,aAAc,EAAK,GAE3DzqB,EAAI,EACR,KAAOA,EAAIsqB,EAAQpX,MAAM,CAAG,EAAGlT,IAAK,CAClC,IAAM0qB,EAAaJ,CAAO,CAACtqB,EAAE,CAC7BkZ,EAAUA,EAAQoB,IAAI,CAAC,IACrBoQ,EAAWhB,MAAM,CAACa,EAAU,CAAEE,aAAc,EAAK,GAErD,CAIA,IAAME,EAAaL,CAAO,CAACtqB,EAAE,CAO7B,MAFAkZ,AAJAA,CAAAA,EAAUA,EAAQoB,IAAI,CAAC,IAAMqQ,EAAWjB,MAAM,CAACa,GAAS,EAIhD/P,KAAK,CAAC6G,IAEPqG,CACT,KmB4I6B,IAAI,CAACK,QAAQ,EAG/B,IAAI,CAACA,QAAQ,AACtB,CAUO6C,MAAMlD,CAAoC,CAAE,KnBxJpBmD,MmB8JzBC,EALJ,GAAI,AAAkB,OAAlB,IAAI,CAAC/C,QAAQ,CACf,MAAM,qBAAkE,CAAlE,AAAIrmB,MAAM,yDAAV,qB,MAAA,O,WAAA,EAAiE,EAKrE,AAAyB,WAAzB,OAAO,IAAI,CAACqmB,QAAQ,CACtB+C,EAAY,EnBhKeD,EmBgKG,IAAI,CAAC9C,QAAQ,CnB/JxC,IAAIrG,eAAe,CACxB1iB,MAAM8f,CAAU,EACdA,EAAW6C,OAAO,CAACL,GAAQyJ,MAAM,CAACF,IAClC/L,EAAW8C,KAAK,EAClB,CACF,ImB0JiD,CACpCzjB,MAAMwT,OAAO,CAAC,IAAI,CAACoW,QAAQ,EACpC+C,EAAY,IAAI,CAAC/C,QAAQ,CAChB3F,OAAOgI,QAAQ,CAAC,IAAI,CAACrC,QAAQ,EACtC+C,EAAY,CAACtJ,GAAiB,IAAI,CAACuG,QAAQ,EAAE,CAE7C+C,EAAY,CAAC,IAAI,CAAC/C,QAAQ,CAAC,CAI7B+C,EAAU/Y,IAAI,CAAC2V,GAGf,IAAI,CAACK,QAAQ,CAAG+C,CAClB,CASA,MAAapB,OAAOa,CAAoC,CAAiB,CACvE,GAAI,CACF,MAAM,IAAI,CAAC7C,QAAQ,CAACgC,MAAM,CAACa,EAAU,CAKnCE,aAAc,EAChB,GAII,IAAI,CAAC3Q,SAAS,EAAE,MAAM,IAAI,CAACA,SAAS,CAGxC,MAAMyQ,EAAS3I,KAAK,EACtB,CAAE,MAAOtF,EAAK,CAIZ,GAAIkL,GAAalL,GAAM,CAErB,MAAMiO,EAASxL,KAAK,CAACzC,GAErB,MACF,CAKA,MAAMA,CACR,CACF,CAQA,MAAamL,mBAAmBlH,CAAmB,CAAE,CACnD,MAAMkH,GAAmB,IAAI,CAACC,QAAQ,CAAEnH,EAAK,IAAI,CAACzG,SAAS,CAC7D,CACF,CC7PO,IAAMkR,GAAoB/sB,OAAO2U,GAAG,CAAC,cA4E5C,SAASqY,GACPpX,CAAoB,CACpBqX,CAAqC,E,IAIjCrX,EADJ,GAAKA,GACD,CAA2B,MAA3BA,CAAAA,EAAAA,EAAUsX,iBAAiB,AAAD,IAA1BtX,EAA6BuX,KAAK,AAAD,EAGlC,AAAC,CAACpe,QAAQsY,GAAG,CAAC+F,gBAAgB,EAC7Bre,AAAuC,MAAvCA,QAAQsY,GAAG,CAACgG,sBAAsB,EACpCzX,EAAU0X,kBAAkB,CAY9B1X,EAAU2X,YAAY,GAAK,EAAE,CAE7B3X,EAAU2X,YAAY,CAACzZ,IAAI,CAAC,CAC1B,GAAGmZ,CAAG,CACNhC,IAAKF,YAAYyC,UAAU,CAAGzC,YAAY0C,GAAG,GAC7CC,IAAK9X,EAAU+X,WAAW,EAAI,CAChC,EACF,ClD/HA,GAAM,CAAEtG,IAAAA,EAAG,CAAEuG,OAAAA,EAAM,CAAE,CAAG7b,AAAAA,CAAAA,MAAAA,CAAAA,EAAAA,UAAS,EAATA,KAAAA,EAAAA,EAAYhD,OAAO,AAAD,GAAK,CAAC,EAE1C8e,GACJxG,IACA,CAACA,GAAIyG,QAAQ,EACZzG,CAAAA,GAAI0G,WAAW,EAAKH,AAAAA,CAAAA,AAAAA,MAAAA,GAAAA,KAAAA,EAAAA,GAAQI,KAAK,AAAD,GAAK,CAAC3G,GAAI4G,EAAE,EAAI5G,AAAa,SAAbA,GAAI6G,IAAI,AAAU,EAE/DC,GAAe,CACnBvB,EACAjJ,EACAliB,EACAuJ,KAEA,IAAMjK,EAAQ6rB,EAAI9S,SAAS,CAAC,EAAG9O,GAASvJ,EAClCwpB,EAAM2B,EAAI9S,SAAS,CAAC9O,EAAQ2Y,EAAM1O,MAAM,EACxCmZ,EAAYnD,EAAIlG,OAAO,CAACpB,GAC9B,MAAO,CAACyK,EACJrtB,EAAQotB,GAAalD,EAAKtH,EAAOliB,EAAS2sB,GAC1CrtB,EAAQkqB,CACd,EAEMoD,GAAY,CAACC,EAAc3K,EAAeliB,EAAU6sB,CAAI,GAC5D,AAAKT,GACE,AAACxH,IACN,IAAMpoB,EAAS,GAAKooB,EACdrb,EAAQ/M,EAAO8mB,OAAO,CAACpB,EAAO2K,EAAKrZ,MAAM,EAC/C,MAAO,CAACjK,EACJsjB,EAAOH,GAAalwB,EAAQ0lB,EAAOliB,EAASuJ,GAAS2Y,EACrD2K,EAAOrwB,EAAS0lB,CACtB,EAPqBrX,OAWViiB,GAAOF,GAAU,UAAW,WAAY,mBAClCA,GAAU,UAAW,WAAY,mBAC9BA,GAAU,UAAW,YAClBA,GAAU,UAAW,YACvBA,GAAU,UAAW,YACtBA,GAAU,UAAW,YACdA,GAAU,UAAW,YAC7BA,GAAU,WAAY,YACpC,IAAMG,GAAMH,GAAU,WAAY,YAC5BI,GAAQJ,GAAU,WAAY,YAC9BK,GAASL,GAAU,WAAY,YACxBA,GAAU,WAAY,YACnC,IAAMM,GAAUN,GAAU,WAAY,YACvBA,GAAU,yBAA0B,YACtCA,GAAU,WAAY,YACnC,IAAMO,GAAQP,GAAU,WAAY,YACvBA,GAAU,WAAY,YACnBA,GAAU,WAAY,YACxBA,GAAU,WAAY,YACpBA,GAAU,WAAY,YACrBA,GAAU,WAAY,YACxBA,GAAU,WAAY,YACnBA,GAAU,WAAY,YACzBA,GAAU,WAAY,YACrBA,GAAU,WAAY,YmDxEtC,IAAMQ,GAAW,CACtBC,KAAMF,GAAML,GAAK,MACjBliB,MAAOmiB,GAAID,GAAK,MAChBQ,KAAML,GAAOH,GAAK,MAClBS,MAAO,IACPvkB,KAAMmkB,GAAML,GAAK,MACjBU,MAAOR,GAAMF,GAAK,MAClBnD,MAAOuD,GAAQJ,GAAK,QACtB,EAEMW,GAAiB,CACrBC,IAAK,MACLJ,KAAM,OACN1iB,MAAO,OACT,EAsCO,SAASA,GAAM,GAAG2N,CAAc,EACrCoV,AArCF,UAAqBC,CAAiC,CAAE,GAAGrV,CAAc,EAClEA,CAAAA,AAAe,KAAfA,CAAO,CAAC,EAAE,EAAWA,AAAetX,KAAAA,IAAfsX,CAAO,CAAC,EAAE,AAAa,GAAMA,AAAmB,IAAnBA,EAAQ/E,MAAM,EACnE+E,EAAQsV,KAAK,GAGf,IAAMC,EACJF,KAAcH,GACVA,EAAc,CAACG,EAA0C,CACzD,MAEAzoB,EAASioB,EAAQ,CAACQ,EAAW,AAE/BrV,AAAmB,KAAnBA,EAAQ/E,MAAM,CAChBvQ,OAAO,CAAC6qB,EAAc,CAAC,IAInBvV,AAAmB,IAAnBA,EAAQ/E,MAAM,EAAU,AAAsB,UAAtB,OAAO+E,CAAO,CAAC,EAAE,CAC3CtV,OAAO,CAAC6qB,EAAc,CAAC,IAAM3oB,EAAS,IAAMoT,CAAO,CAAC,EAAE,EAEtDtV,OAAO,CAAC6qB,EAAc,CAAC,IAAM3oB,KAAWoT,EAG9C,GAcc,WAAYA,EAC1B,CAsBsB,IC/Ef,MAOL/H,YAAYud,CAAe,CAAEC,CAAoC,CAAE,CACjE,IAAI,CAAClK,KAAK,CAAG,IAAI9nB,IACjB,IAAI,CAACiyB,KAAK,CAAG,IAAIjyB,IACjB,IAAI,CAACkyB,SAAS,CAAG,EACjB,IAAI,CAACH,OAAO,CAAGA,EACf,IAAI,CAACC,aAAa,CAAGA,GAAmB,KAAK,EAC/C,CAEA9c,IAAI/U,CAAmB,CAAEC,CAAS,CAAQ,CACxC,GAAI,CAACD,GAAO,CAACC,EAAO,OAEpB,IAAMsR,EAAO,IAAI,CAACsgB,aAAa,CAAC5xB,GAEhC,GAAIsR,EAAO,IAAI,CAACqgB,OAAO,CAAE,CACvB9qB,QAAQqqB,IAAI,CAAC,oCACb,MACF,CAEI,IAAI,CAACxJ,KAAK,CAAC3S,GAAG,CAAChV,IACjB,KAAI,CAAC+xB,SAAS,EAAI,IAAI,CAACD,KAAK,CAACnd,GAAG,CAAC3U,IAAQ,GAG3C,IAAI,CAAC2nB,KAAK,CAAC5S,GAAG,CAAC/U,EAAKC,GACpB,IAAI,CAAC6xB,KAAK,CAAC/c,GAAG,CAAC/U,EAAKuR,GACpB,IAAI,CAACwgB,SAAS,EAAIxgB,EAElB,IAAI,CAACygB,KAAK,CAAChyB,EACb,CAEAgV,IAAIhV,CAAmB,CAAW,OAChC,EAAKA,IAEL,IAAI,CAACgyB,KAAK,CAAChyB,GACJT,CAAAA,CAAQ,IAAI,CAACooB,KAAK,CAAChT,GAAG,CAAC3U,GAChC,CAEA2U,IAAI3U,CAAmB,CAAiB,CACtC,GAAI,CAACA,EAAK,OAEV,IAAMC,EAAQ,IAAI,CAAC0nB,KAAK,CAAChT,GAAG,CAAC3U,GAC7B,GAAIC,AAAU6E,KAAAA,IAAV7E,EAKJ,OADA,IAAI,CAAC+xB,KAAK,CAAChyB,GACJC,CACT,CAEQ+xB,MAAMhyB,CAAW,CAAQ,CAC/B,IAAMC,EAAQ,IAAI,CAAC0nB,KAAK,CAAChT,GAAG,CAAC3U,EACf8E,MAAAA,IAAV7E,IACF,IAAI,CAAC0nB,KAAK,CAACxR,MAAM,CAACnW,GAClB,IAAI,CAAC2nB,KAAK,CAAC5S,GAAG,CAAC/U,EAAKC,GACpB,IAAI,CAACgyB,gBAAgB,GAEzB,CAEQA,kBAAyB,CAC/B,KAAO,IAAI,CAACF,SAAS,CAAG,IAAI,CAACH,OAAO,EAAI,IAAI,CAACjK,KAAK,CAACpW,IAAI,CAAG,GACxD,IAAI,CAAC2gB,sBAAsB,EAE/B,CAEQA,wBAA+B,CACrC,IAAMC,EAAS,IAAI,CAACxK,KAAK,CAACjS,IAAI,GAAG0c,IAAI,GAAGnyB,KAAK,CAC7C,GAAIkyB,AAAWrtB,KAAAA,IAAXqtB,EAAsB,CACxB,IAAME,EAAU,IAAI,CAACP,KAAK,CAACnd,GAAG,CAACwd,IAAW,CAC1C,KAAI,CAACJ,SAAS,EAAIM,EAClB,IAAI,CAAC1K,KAAK,CAACxR,MAAM,CAACgc,GAClB,IAAI,CAACL,KAAK,CAAC3b,MAAM,CAACgc,EACpB,CACF,CAEAjF,OAAQ,CACN,IAAI,CAACvF,KAAK,CAAC2K,KAAK,GAChB,IAAI,CAACR,KAAK,CAACQ,KAAK,GAChB,IAAI,CAACP,SAAS,CAAG,CACnB,CAEArc,MAAO,CACL,MAAO,IAAI,IAAI,CAACiS,KAAK,CAACjS,IAAI,GAAG,AAC/B,CAEA6c,OAAOvyB,CAAW,CAAQ,CACpB,IAAI,CAAC2nB,KAAK,CAAC3S,GAAG,CAAChV,KACjB,IAAI,CAAC+xB,SAAS,EAAI,IAAI,CAACD,KAAK,CAACnd,GAAG,CAAC3U,IAAQ,EACzC,IAAI,CAAC2nB,KAAK,CAACxR,MAAM,CAACnW,GAClB,IAAI,CAAC8xB,KAAK,CAAC3b,MAAM,CAACnW,GAEtB,CAEAsyB,OAAc,CACZ,IAAI,CAAC3K,KAAK,CAAC2K,KAAK,GAChB,IAAI,CAACR,KAAK,CAACQ,KAAK,GAChB,IAAI,CAACP,SAAS,CAAG,CACnB,CAEA,IAAIxgB,MAAe,CACjB,OAAO,IAAI,CAACoW,KAAK,CAACpW,IAAI,AACxB,CAEA,IAAIihB,aAAsB,CACxB,OAAO,IAAI,CAACT,SAAS,AACvB,CACF,EDhC2C,IAAQ,AAAC9xB,GAAUA,EAAMoX,MAAM,EAA1E,IE3EMob,GAA0B,CAAC,OAAQ,UAAU,CAEnD,SAASC,KACP,OAAO,IAAI1O,SAAS,KAAM,CAAEC,OAAQ,GAAI,EAC1C,C,iDCRA,IAAM0O,GAAmC,CACvC,mBACA,YACA,sBACA,qBACA,kBACA,aACA,SACA,WACA,uBACA,gBACA,6BACA,gBACD,CAED,SAASC,GAAWnkB,CAAY,CAAE2N,CAAe,EAE/C,GADA3N,EAAM2N,OAAO,CAAGA,EACZ3N,EAAMzB,KAAK,CAAE,CACf,IAAM6lB,EAAQpkB,EAAMzB,KAAK,CAACiT,KAAK,CAAC,KAChC4S,CAAAA,CAAK,CAAC,EAAE,CAAGzW,EACX3N,EAAMzB,KAAK,CAAG6lB,EAAM9c,IAAI,CAAC,KAC3B,CACF,CChBA,IAAM+c,GAAgB,IAAI9f,IAAInU,OAAO4X,MAAM,CANN,CACnCsc,UAAW,IACXC,UAAW,IACXC,aAAc,GAChB,IAiBO,SAASC,GACdzkB,CAAc,EAEd,GACE,AAAiB,UAAjB,OAAOA,GACPA,AAAU,OAAVA,GACA,CAAE,YAAYA,CAAI,GAClB,AAAwB,UAAxB,OAAOA,EAAM8R,MAAM,CAEnB,MAAO,GAET,GAAM,CAACvX,EAAQmqB,EAAW,CAAG1kB,EAAM8R,MAAM,CAACN,KAAK,CAAC,KAEhD,MACEjX,AA3B0C,6BA2B1CA,GACA8pB,GAAc9d,GAAG,CAAC3T,OAAO8xB,GAE7B,CCtCO,IAAKC,GAAkBA,SAAlBA,CAAkB,E,kIAAlBA,C,MCEL,IAAMC,GAAsB,gBAkB5B,SAASC,GAAgB7kB,CAAc,EAC5C,GACE,AAAiB,UAAjB,OAAOA,GACPA,AAAU,OAAVA,GACA,CAAE,YAAYA,CAAI,GAClB,AAAwB,UAAxB,OAAOA,EAAM8R,MAAM,CAEnB,MAAO,GAGT,IAAMA,EAAS9R,EAAM8R,MAAM,CAACN,KAAK,CAAC,KAC5B,CAACsT,EAAW3rB,EAAK,CAAG2Y,EACpBiT,EAAcjT,EAAOJ,KAAK,CAAC,EAAG,IAAIpK,IAAI,CAAC,KAGvC0d,EAAapyB,OAFJkf,EAAOmT,EAAE,CAAC,KAIzB,OACEH,IAAcF,IACbzrB,CAAAA,AAAS,YAATA,GAAsBA,AAAS,SAATA,CAAc,GACrC,AAAuB,UAAvB,OAAO4rB,GACP,CAACxuB,MAAMyuB,IACPA,KAAcL,EAElB,CC1CO,SAASO,GACdC,CAAoB,CACpB1R,CAAa,MAOT9F,EAJJ,IAAIyX,ACsBC,SAAoCplB,CAAc,MChBrBgS,EDkBlC,GCjBmB,UAAf,OAD8BA,EDkBVhS,ICjBOgS,AAAQ,OAARA,GAAkB,WAAYA,GAItDA,AAjBc,qCAiBdA,EAAIF,MAAM,ECJV+S,GFoBe7kB,IEpBWykB,GFoBXzkB,IAMlB+R,GAAqB/R,GATO,OAAOA,EAAM8R,MAAM,AAYrD,EDpCiCqT,IAK/B,GACE,AAAuB,UAAvB,OAAOA,GACPA,AAAgB,OAAhBA,GACA,AAAwC,UAAxC,OAAQA,EAAoBxX,OAAO,CAGnC,IADAA,EAAWwX,EAAoBxX,OAAO,CAClC,AAAsC,UAAtC,OAAQwX,EAAoB5mB,KAAK,CAAe,CAClD,IAAM8mB,EAA8BF,EAAoB5mB,KAAK,CACvD+mB,EAAaD,EAAmB3M,OAAO,CAAC,MAC9C,GAAI4M,EAAa,GAAI,CACnB,IAAMtlB,EAAQ,qBAIb,CAJa,AAAI5I,MAChB,CAAC,MAAM,EAAEqc,EAAM;;gBAET,EAAE9F,EAAQ,CAAC,EAHL,qB,MAAA,O,WAAA,EAId,EACA3N,CAAAA,EAAMzB,KAAK,CACT,UAAYyB,EAAM2N,OAAO,CAAG0X,EAAmB3T,KAAK,CAAC4T,GACvDjtB,QAAQ2H,KAAK,CAACA,GACd,MACF,CACF,MACgC,UAAvB,OAAOmlB,GAChBxX,CAAAA,EAAUwX,CAAU,EAGtB,GAAIxX,EAAS,CACXtV,QAAQ2H,KAAK,CAAC,CAAC,MAAM,EAAEyT,EAAM;;kBAEf,EAAE9F,EAAQ,CAAC,EACzB,MACF,CAEAtV,QAAQ2H,KAAK,CACX,CAAC,MAAM,EAAEyT,EAAM,wOAAwO,CAAC,EAE1Ppb,QAAQ2H,KAAK,CAACmlB,GAEhB,C,+EIuGaI,GAAmBxS,KAAAA,aAAmB,CACjD,MAEWyS,GAAsBzS,KAAAA,aAAmB,CAK5C,MAEG0S,GAA4B1S,KAAAA,aAAmB,CAKzD,MAEU2S,GAAkB3S,KAAAA,aAAmB,CAAkB,KAGlEwS,CAAAA,GAAiB1hB,WAAW,CAAG,mBAC/B2hB,GAAoB3hB,WAAW,CAAG,sBAClC4hB,GAA0B5hB,WAAW,CAAG,4BACxC6hB,GAAgB7hB,WAAW,CAAG,kBAGzB,IAAM8hB,GAAqB5S,KAAAA,aAAmB,CAAc,IAAIxO,IC3KhE,OAAMqhB,GAOXhgB,aAAc,CACZ,IAAI,CAAC3G,KAAK,CAAG,EACb,IAAI,CAAC4mB,cAAc,CAAG,EAAE,CACxB,IAAI,CAACC,SAAS,CAAG,EAAE,CACnB,IAAI,CAACC,WAAW,CAAG,GACnB,IAAI,CAACC,WAAW,CAAG,EACrB,CAEQC,qBAAsB,CACvB,IAAI,CAACF,WAAW,GACnB,IAAI,CAACA,WAAW,CAAG,GACnBrjB,QAAQwjB,QAAQ,CAAC,KAEf,GADA,IAAI,CAACH,WAAW,CAAG,GACf,AAAe,IAAf,IAAI,CAAC9mB,KAAK,CAAQ,CACpB,IAAK,IAAIvJ,EAAI,EAAGA,EAAI,IAAI,CAACmwB,cAAc,CAACjd,MAAM,CAAElT,IAC9C,IAAI,CAACmwB,cAAc,CAACnwB,EAAE,EAExB,KAAI,CAACmwB,cAAc,CAACjd,MAAM,CAAG,CAC/B,CACF,IAEG,IAAI,CAACod,WAAW,GACnB,IAAI,CAACA,WAAW,CAAG,GACnBzuB,WAAW,KAET,GADA,IAAI,CAACyuB,WAAW,CAAG,GACf,AAAe,IAAf,IAAI,CAAC/mB,KAAK,CAAQ,CACpB,IAAK,IAAIvJ,EAAI,EAAGA,EAAI,IAAI,CAACowB,SAAS,CAACld,MAAM,CAAElT,IACzC,IAAI,CAACowB,SAAS,CAACpwB,EAAE,EAEnB,KAAI,CAACowB,SAAS,CAACld,MAAM,CAAG,CAC1B,CACF,EAAG,GAEP,CAMAud,YAAa,CACX,OAAO,IAAIjvB,QAAc,AAACuK,IACxB,IAAI,CAACokB,cAAc,CAACpe,IAAI,CAAChG,GACN,IAAf,IAAI,CAACxC,KAAK,EACZ,IAAI,CAACgnB,mBAAmB,EAE5B,EACF,CAOAG,YAAa,CACX,OAAO,IAAIlvB,QAAc,AAACuK,IACxB,IAAI,CAACqkB,SAAS,CAACre,IAAI,CAAChG,GACD,IAAf,IAAI,CAACxC,KAAK,EACZ,IAAI,CAACgnB,mBAAmB,EAE5B,EACF,CAEAI,WAAY,CACV,IAAI,CAACpnB,KAAK,EACZ,CAEAqnB,SAAU,CAOR,IAAI,CAACrnB,KAAK,GACS,IAAf,IAAI,CAACA,KAAK,EACZ,IAAI,CAACgnB,mBAAmB,EAE5B,CACF,CCpFA,IAAMM,GAA+B,6BAE9B,SAASC,GAA6BxzB,CAAc,CAAEmT,CAAY,SACvE,AAAIogB,GAA6BhZ,IAAI,CAACpH,GAC7B,CAAC,EAAE,EAAEnT,EAAO,CAAC,EAAEmT,EAAK,EAAE,CAAC,CAEzB,CAAC,EAAE,EAAEnT,EAAO,CAAC,EAAEkB,KAAKuyB,SAAS,CAACtgB,GAAM,GAAG,CAAC,AACjD,CAiCO,IAAMugB,GAAsB,IAAIniB,IAAI,CACzC,iBACA,gBACA,uBACA,WACA,UACA,iBAIA,OACA,QACA,UAIA,SAGA,cAIA,SACA,WACA,aACD,ECxEKoiB,GAAsC,CAAEC,QAAS,IAAK,EAGtD1N,GACJ,AAAuB,YAAvB,OAAOnG,EAAAA,KAAW,CACdA,EAAAA,KAAW,CACX,AAACpY,GAA+BA,EAKhCksB,GAAiBnkB,QAAQsY,GAAG,CAAC8L,iBAAiB,CAChDzuB,QAAQ2H,KAAK,CACb3H,QAAQqqB,IAAI,CAIVqE,GAAyB7N,GAE7B,AAAC3nB,IACC,GAAI,CACFs1B,GAAeF,GAASC,OAAO,CACjC,QAAU,CACRD,GAASC,OAAO,CAAG,IACrB,CACF,GAcK,SAASI,GACdC,CAAoC,EAEpC,OAAO,SAAyB,GAAGrzB,CAAU,EAC3C,IAAM+Z,EAAUsZ,KAAcrzB,EAEa,E,IACjB,EAAxB,IAAMszB,EAAkB,AAAiB,MAAjB,GAAI9vB,QAAQmH,KAAK,AAAD,EAAC,OAAjB,EAAmBiT,KAAK,CAAC,MACjD,GAAI0V,AAAoB7wB,KAAAA,IAApB6wB,GAAiCA,EAAgBte,MAAM,CAAG,EAC5Die,GAAelZ,OACV,CAML,IAAMpc,EAAM21B,CAAe,CAAC,EAAE,AAC9BP,CAAAA,GAASC,OAAO,CAAGjZ,EACnBoZ,GAAuBx1B,EACzB,CACF,CAGF,CACF,CCkIA,IAAM41B,GAAe,IAAI5kB,QAkJzB,SAAS6kB,GAA0BC,CAAwB,EACzD,IAAMC,EAAeH,GAAajhB,GAAG,CAACmhB,GACtC,GAAIC,EACF,OAAOA,EAMT,IAAM1Y,EAAU1X,QAAQuK,OAAO,CAAC4lB,GAYhC,OAXAF,GAAa7gB,GAAG,CAAC+gB,EAAkBzY,GAEnCxe,OAAO6W,IAAI,CAACogB,GAAkB1f,OAAO,CAAC,AAACxB,IACjCugB,GAAoB,GAAG,CAACvgB,IAIxByI,CAAAA,CAAe,CAACzI,EAAK,CAAGkhB,CAAgB,CAAClhB,EAAK,AAAD,CAEnD,GAEOyI,CACT,CA8DA,SAAS2Y,GACP9T,CAAyB,CACzBrB,CAAkB,CAClBoV,CAAiC,EAEjC,IAAMnX,EAAgBC,EAAAA,oBAAAA,CAAAA,QAA6B,GAEjDD,GACAA,AAAuB,YAAvBA,EAAclX,IAAI,EAClBkX,AAAiC,KAAjCA,EAAcsE,cAAc,EAK5BD,GADqBrE,GAInBmX,GAAqBA,EAAkB5e,MAAM,CAAG,EAClD6e,GAA6BhU,EAAOrB,EAAYoV,GAEhDE,GAAkBjU,EAAOrB,EAE7B,CAEA,IAAMsV,GAAoBV,GACxBW,IAGIF,GACJT,GAcF,SACEvT,CAAyB,CACzBrB,CAAkB,CAClBoV,CAAgC,EAEhC,IAAMjtB,EAASkZ,EAAQ,CAAC,OAAO,EAAEA,EAAM,EAAE,CAAC,CAAG,cAC7C,OAAO,qBAON,CAPM,AAAIrc,MACT,CAAC,EAAEmD,EAAO,KAAK,EAAE6X,EAId,iLAAEwV,AAKT,SAAqCC,CAAyB,EAC5D,OAAQA,EAAWjf,MAAM,EACvB,KAAK,EACH,MAAM,qBAEL,CAFK,IAAI8E,EACR,uFADI,qB,MAAA,O,WAAA,EAEN,EACF,MAAK,EACH,MAAO,CAAC,EAAE,EAAEma,CAAU,CAAC,EAAE,CAAC,EAAE,CAAC,AAC/B,MAAK,EACH,MAAO,CAAC,EAAE,EAAEA,CAAU,CAAC,EAAE,CAAC,SAAS,EAAEA,CAAU,CAAC,EAAE,CAAC,EAAE,CAAC,AACxD,SAAS,CACP,IAAIhW,EAAc,GAClB,IAAK,IAAInc,EAAI,EAAGA,EAAImyB,EAAWjf,MAAM,CAAG,EAAGlT,IACzCmc,GAAe,CAAC,EAAE,EAAEgW,CAAU,CAACnyB,EAAE,CAAC,IAAI,CAAC,CAGzC,OADAmc,EAAe,CAAC,QAAQ,EAAEgW,CAAU,CAACA,EAAWjf,MAAM,CAAG,EAAE,CAAC,EAAE,CAAC,AAEjE,CACF,CACF,EAxBqC4e,GAAmB,gEAAE,CAJvB,EAD1B,qB,MAAA,O,WAAA,EAOP,EACF,GA1BA,SAASG,GACPlU,CAAyB,CACzBrB,CAAkB,EAElB,IAAM7X,EAASkZ,EAAQ,CAAC,OAAO,EAAEA,EAAM,EAAE,CAAC,CAAG,cAC7C,OAAO,qBAIN,CAJM,AAAIrc,MACT,CAAC,EAAEmD,EAAO,KAAK,EAAE6X,EAAW,0HAAE,CAAC,EAD1B,qB,MAAA,O,WAAA,EAIP,EACF,CC7XO,MAAM0V,GACXliB,YACkB5F,CAAoB,CACpB1K,CAAiB,CACjC,C,KAFgB0K,KAAK,CAALA,E,KACA1K,OAAO,CAAPA,CACf,CACL,CAuFO,MAAMyyB,WAA4BpiB,E,eAoBhBqiB,aAAa,CAAGA,CAAaA,AAepDpiB,aAAY,CACVC,SAAAA,CAAQ,CACRC,WAAAA,CAAU,CACVmiB,iBAAAA,CAAgB,CAChBC,iBAAAA,CAAgB,CACW,CAAE,CAe7B,GAdA,KAAK,CAAC,CAAEriB,SAAAA,EAAUC,WAAAA,CAAW,GAnC9B,KACewK,oBAAoB,CAAGA,EAAAA,oBAAoBA,CAI1D,KACe9G,gBAAgB,CAAGA,EAAAA,gBAAgBA,CAKlD,KACe2e,WAAW,CAAGA,EAO7B,KACeC,kBAAkB,CAAGA,GAAAA,kBAAkBA,CAiBrD,IAAI,CAACH,gBAAgB,CAAGA,EACxB,IAAI,CAACC,gBAAgB,CAAGA,EAIxB,IAAI,CAACG,OAAO,CAAGC,AdvNZ,SACLC,CAA0B,EAI1B,IAAMF,EAAkDnX,EAAa,MAAM,CACzE,CAACsX,EAAKC,IAAY,EAChB,GAAGD,CAAG,CAGN,CAACC,EAAO,CAAEF,CAAQ,CAACE,EAAO,EAAIxE,EAChC,GACA,CAAC,GAKGyE,EAAc,IAAInkB,IAAI2M,EAAa,MAAM,CAAC,AAACuX,GAAWF,CAAQ,CAACE,EAAO,GAM5E,IAAK,IAAMA,KALKzE,GAAwBra,MAAM,CAC5C,AAAC8e,GAAW,CAACC,EAAYniB,GAAG,CAACkiB,IAID,CAI5B,GAAIA,AAAW,SAAXA,EAAmB,CACjBF,EAASI,GAAG,GAEdN,EAAQ5R,IAAI,CAAG8R,EAASI,GAAG,CAG3BD,EAAY1e,GAAG,CAAC,SAElB,QACF,CAGA,GAAIye,AAAW,YAAXA,EAAsB,CAIxB,IAAMG,EAAuB,CAAC,aAAcF,EAAY,AAIpD,EAACA,EAAYniB,GAAG,CAAC,SAAWmiB,EAAYniB,GAAG,CAAC,QAC9CqiB,EAAMnhB,IAAI,CAAC,QAKb,IAAMnS,EAAU,CAAEuzB,MAAOD,EAAME,IAAI,GAAGxhB,IAAI,CAAC,KAAM,CAIjD+gB,CAAAA,EAAQU,OAAO,CAAG,IAAM,IAAIxT,SAAS,KAAM,CAAEC,OAAQ,IAAKlgB,QAAAA,CAAQ,GAGlEozB,EAAY1e,GAAG,CAAC,WAEhB,QACF,CAEA,MAAM,qBAEL,CAFK,AAAI5S,MACR,CAAC,0EAA0E,EAAEqxB,EAAO,CAAC,EADjF,qB,MAAA,O,WAAA,EAEN,EACF,CAEA,OAAOJ,CACT,EcgJwCxiB,GAGpC,IAAI,CAACmjB,mBAAmB,CAAGA,GAAoBnjB,GAG/C,IAAI,CAACojB,OAAO,CAAG,IAAI,CAACpjB,QAAQ,CAACojB,OAAO,CAChC,AAA0B,WAA1B,IAAI,CAACf,gBAAgB,CAAe,CACtC,GAAI,AAAiB,kBAAjB,IAAI,CAACe,OAAO,CACd,MAAM,qBAEL,CAFK,AAAI7xB,MACR,CAAC,gDAAgD,EAAE0O,EAAWsL,QAAQ,CAAC,wHAAwH,CAAC,EAD5L,qB,MAAA,O,WAAA,EAEN,GACK,GAAI,CAAC8X,ACpOX,SACLC,CAA8C,EAE9C,MACEA,AAAgB,iBAAhBA,EAAIF,OAAO,EACXE,AAAgB,UAAhBA,EAAIF,OAAO,EACXE,AAAmB,KAAnBA,EAAIvV,UAAU,EACbuV,AAAmB9yB,KAAAA,IAAnB8yB,EAAIvV,UAAU,EAAkBuV,EAAIvV,UAAU,CAAG,GAClD,AAAmC,YAAnC,OAAOuV,EAAIC,oBAAoB,AAEnC,ED0NqC,IAAI,CAACvjB,QAAQ,GAAK,IAAI,CAACA,QAAQ,CAAC,GAAM,CACnE,MAAM,qBAEL,CAFK,AAAIzO,MACR,CAAC,uFAAuF,EAAE0O,EAAWsL,QAAQ,CAAC,yGAAyG,CAAC,EADpN,qB,MAAA,O,WAAA,EAEN,EAEA,KAAI,CAAC6X,OAAO,CAAG,OAEnB,CAQE,IAAK,IAAMR,KADQvX,EAAa,GAAG,CAAC,AAACuX,GAAWA,EAAO1hB,WAAW,IAE5D0hB,KAAU,IAAI,CAAC5iB,QAAQ,EACzBwjB,GACE,CAAC,2BAA2B,EAAEZ,EAAO,MAAM,EACzC,IAAI,CAACR,gBAAgB,CACtB,yBAAyB,EAAEQ,EAAOa,WAAW,GAAG,gCAAgC,CAAC,CAOpF,aAAa,IAAI,CAACzjB,QAAQ,EAC5BwjB,GACE,CAAC,4BAA4B,EAAE,IAAI,CAACpB,gBAAgB,CAAC,sDAAsD,CAAC,EAM3G/W,EAAa,IAAI,CAAC,AAACuX,GAAWA,KAAU,IAAI,CAAC5iB,QAAQ,GACxDwjB,GACE,CAAC,6BAA6B,EAAE,IAAI,CAACpB,gBAAgB,CAAC,8CAA8C,CAAC,CAI7G,CAQQxmB,QAAQgnB,CAAc,CAAqB,QAEjD,AjDpQKvX,EAAa8D,QAAQ,CiDoQRyT,GAGX,IAAI,CAACJ,OAAO,CAACI,EAAO,CAHO,IAAM,IAAIlT,SAAS,KAAM,CAAEC,OAAQ,GAAI,EAI3E,CAEA,MAAc+T,GACZC,CAA0B,CAC1BC,CAAwB,CACxBlgB,CAAoB,CAIpBY,CAA0B,CAC1Buf,CAAsB,CACtBC,CAAoB,CACpBnxB,CAAoC,CACpC,KAE2BA,EAqSzB+Q,EAcmC0K,E3CxfvC2V,EAEOA,M2CsND3T,EApBJ,IAAMgL,EAAqB1X,EAAU0X,kBAAkB,CACjD4I,EAAmB,CAAC,EAAgC,MAA/BrxB,CAAAA,EAAAA,EAAQsxB,UAAU,CAACC,YAAY,AAAD,EAAC,OAA/BvxB,EAAiCwxB,SAAS,AAAD,GAGpEC,AjB2rBG,SAAoBz0B,CAAwB,EAEjD,GAz8BQkQ,AAA8D,KAA9DA,UAAsC,CAACgb,GAAkB,CAy8B3C,OAItB,IAAM1Z,EAAWkjB,AmBr9BZ,SAA2BC,CAA2B,EAC3D,IAAMC,EAAkBrX,EAAAA,KAAW,CAEjC,AAAC4C,GAA8B,EAAE,EAGnC,OAAO,SACL0U,CAA2B,CAC3B70B,CAAqB,MAajBmgB,EACA2U,EAZJ,GAAI90B,GAAWA,EAAQ8c,MAAM,CAQ3B,OAAO6X,EAAcE,EAAU70B,GAKjC,GAAI,AAAoB,UAApB,OAAO60B,GAA0B70B,EAI9B,CAKL,IAAMm0B,EACJ,AAAoB,UAApB,OAAOU,GAAyBA,aAAoBxQ,IAChD,IAAI+C,QAAQyN,EAAU70B,GACtB60B,EACN,GACGV,AAAmB,QAAnBA,EAAQlB,MAAM,EAAckB,AAAmB,SAAnBA,EAAQlB,MAAM,EAC3CkB,EAAQY,SAAS,CAMjB,OAAOJ,EAAcE,EAAU70B,GAEjC80B,EAhEGp2B,KAAKuyB,SAAS,CAAC,CACpBkD,AA+D8BA,EA/DtBlB,MAAM,CACd50B,MAAMP,IAAI,CAACq2B,AA8DmBA,EA9DXr0B,OAAO,CAACwS,OAAO,IAClC6hB,AA6D8BA,EA7DtBa,IAAI,CACZb,AA4D8BA,EA5DtBc,QAAQ,CAChBd,AA2D8BA,EA3DtBe,WAAW,CACnBf,AA0D8BA,EA1DtBgB,QAAQ,CAChBhB,AAyD8BA,EAzDtBiB,cAAc,CACtBjB,AAwD8BA,EAxDtBkB,SAAS,CAClB,EAwDGlV,EAAMgU,EAAQhU,GAAG,AACnB,MAvBE2U,EApDiB,+CAqDjB3U,EAAM0U,EAwBR,IAAMS,EAAeV,EAAgBzU,GACrC,IAAK,IAAIjgB,EAAI,EAAGohB,EAAIgU,EAAaliB,MAAM,CAAElT,EAAIohB,EAAGphB,GAAK,EAAG,CACtD,GAAM,CAACnE,EAAKqd,EAAQ,CAAGkc,CAAY,CAACp1B,EAAE,CACtC,GAAInE,IAAQ+4B,EACV,OAAO1b,EAAQoB,IAAI,CAAC,KAClB,IAAMyN,EAAWqN,CAAY,CAACp1B,EAAE,CAAC,EAAE,CACnC,GAAI,CAAC+nB,EAAU,MAAM,qBAAwC,CAAxC,IAAI/P,EAAe,sBAAnB,qB,MAAA,O,WAAA,EAAuC,GAM5D,GAAM,CAAC4H,EAASM,EAAQ,CAAGX,GAAcwI,GAEzC,OADAqN,CAAY,CAACp1B,EAAE,CAAC,EAAE,CAAGkgB,EACdN,CACT,EAEJ,CAIA,IAAM1G,EAAUub,EAAcE,EAAU70B,GAClCu1B,EAAoB,CAACT,EAAU1b,EAAS,KAAK,CAGnD,OAFAkc,EAAarjB,IAAI,CAACsjB,GAEXnc,EAAQoB,IAAI,CAAC,AAACyN,IAKnB,GAAM,CAACnI,EAASM,EAAQ,CAAGX,GAAcwI,GAEzC,OADAsN,CAAK,CAAC,EAAE,CAAGnV,EACJN,CACT,EACF,CACF,EnBg4BqC5P,WAAWslB,KAAK,CAGnDtlB,CAAAA,WAAWslB,KAAK,CAAGC,AAl2Bd,SACLC,CAAoB,CACpB,CAAE1hB,iBAAAA,CAAgB,CAAE8G,qBAAAA,CAAoB,CAAmB,EAI3D,IAAM6a,EAAU,MACdnR,EACA1U,SAYeA,EAIKA,MAdhBqQ,EACJ,GAAI,CAEFA,AADAA,CAAAA,EAAM,IAAIkE,IAAIG,aAAiB4C,QAAU5C,EAAMrE,GAAG,CAAGqE,EAAK,EACtDyC,QAAQ,CAAG,GACf9G,EAAI6G,QAAQ,CAAG,EACjB,CAAE,KAAM,CAEN7G,EAAMtf,KAAAA,CACR,CACA,IAAM+0B,EAAWzV,AAAAA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAK2G,IAAI,AAAD,GAAK,GACxBmM,EAASnjB,AAAAA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,AAAY,MAAZA,CAAAA,EAAAA,EAAMmjB,MAAM,AAAD,EAAC,OAAZnjB,EAAcgkB,WAAW,EAAC,GAAK,MAIxC+B,EAAa,AAAC/lB,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,AAAU,MAAVA,CAAAA,EAAAA,EAAMqe,IAAI,AAAD,EAAC,OAAVre,EAAoBgmB,QAAQ,AAAD,IAAM,GAC/CC,EAAW7oB,AAAyC,MAAzCA,QAAQsY,GAAG,CAACwQ,wBAAwB,CAK/CC,EAAiCJ,EACnCh1B,KAAAA,EACAqoB,YAAYyC,UAAU,CAAGzC,YAAY0C,GAAG,GAEtC7X,EAAYC,EAAiB0F,QAAQ,GACrCmB,EAAgBC,EAAqBpB,QAAQ,GAG/Cwc,EACFrb,GAAiBA,AAAuB,cAAvBA,EAAclX,IAAI,CAC/BkX,EAAcqb,WAAW,CACzB,KACFA,GACFA,EAAYrF,SAAS,GAGvB,IAAMpyB,EAAS6qB,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,IAAYC,KAAK,CAC9BsM,EAAa1f,EAAAA,aAAgC,CAAGG,EAAAA,KAAmB,CACnE,CACEyf,SAAAA,EACAI,KAAMC,EAAAA,QAAAA,CAAAA,MAAe,CACrB5M,SAAU,CAAC,QAASyJ,EAAQ2C,EAAS,CAACzhB,MAAM,CAAC7Y,SAASwW,IAAI,CAAC,KAC3DxV,WAAY,CACV,WAAYs5B,EACZ,cAAe3C,EACf,gBAAiB9S,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAKuF,QAAQ,CAC9B,gBAAiBvF,AAAAA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAKyG,IAAI,AAAD,GAAK/lB,KAAAA,CAChC,CACF,EACA,cAqKIw1B,MAjFEC,EAiPAxB,EAmNAyB,EA1fAC,EA5BJ,GAAIX,GAOA,CAAC9hB,GAMDA,EAAU0iB,WAAW,CAZvB,OAAOf,EAAYlR,EAAO1U,GAgB5B,IAAM4mB,EACJlS,GACA,AAAiB,UAAjB,OAAOA,GACP,AAAqC,UAArC,OAAQA,EAAkByO,MAAM,CAE5BoD,EAAiB,AAACM,GAGf36B,AADQ8T,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,CAAc,CAAC6mB,EAAM,AAAD,GAClBD,CAAAA,EAAkBlS,CAAa,CAACmS,EAAM,CAAG,IAAG,EAIzDC,EAAe,AAACD,I,IACN7mB,EACVA,EAEE,EAHN,OAAO,AAA+B,SAAxBA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,AAAU,MAAVA,CAAAA,EAAAA,EAAMqe,IAAI,AAAD,EAAC,OAAVre,CAAY,CAAC6mB,EAAM,AAAD,EAC5B7mB,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,AAAU,MAAVA,CAAAA,EAAAA,EAAMqe,IAAI,AAAD,EAAC,OAAVre,CAAY,CAAC6mB,EAAM,CACnBD,EAAAA,AACqB,MAAnB,GAAClS,EAAc2J,IAAI,AAAD,EAAC,OAAnB,CAAqB,CAACwI,EAAM,CAC5B91B,KAAAA,CACR,EAGIg2B,EAAyBD,EAAa,cACpCE,EAAiBC,AAjLxB,SAAsBD,CAAW,CAAEza,CAAmB,EAC3D,IAAM2a,EAAsB,EAAE,CACxBC,EAGD,EAAE,CAEP,IAAK,IAAI/2B,EAAI,EAAGA,EAAI42B,EAAK1jB,MAAM,CAAElT,IAAK,CACpC,IAAM+Y,EAAM6d,CAAI,CAAC52B,EAAE,CAanB,GAXI,AAAe,UAAf,OAAO+Y,EACTge,EAAYhlB,IAAI,CAAC,CAAEgH,IAAAA,EAAKsG,OAAQ,gCAAiC,GACxDtG,EAAI7F,MAAM,C5C1DgB,I4C2DnC6jB,EAAYhlB,IAAI,CAAC,CACfgH,IAAAA,EACAsG,OAAQ,4BACV,GAEAyX,EAAU/kB,IAAI,CAACgH,GAGb+d,EAAU5jB,MAAM,C5CpEgB,I4CoEa,CAC/CvQ,QAAQqqB,IAAI,CACV,CAAC,oCAAoC,EAAE7Q,EAAY,eAAe,CAAC,CACnEya,EAAK5a,KAAK,CAAChc,GAAG4R,IAAI,CAAC,OAErB,KACF,CACF,CAEA,GAAImlB,EAAY7jB,MAAM,CAAG,EAGvB,IAAK,GAAM,CAAE6F,IAAAA,CAAG,CAAEsG,OAAAA,CAAM,CAAE,GAF1B1c,QAAQqqB,IAAI,CAAC,CAAC,gCAAgC,EAAE7Q,EAAY,EAAE,CAAC,EAEjC4a,GAC5Bp0B,QAAQyqB,GAAG,CAAC,CAAC,MAAM,EAAErU,EAAI,EAAE,EAAEsG,EAAO,CAAC,EAGzC,OAAOyX,CACT,EA4IUJ,EAAa,SAAW,EAAE,CAC1B,CAAC,MAAM,EAAEpS,EAAMlQ,QAAQ,GAAG,CAAC,EAGvB4iB,EACJrc,GACCA,CAAAA,AAAuB,UAAvBA,EAAclX,IAAI,EACjBkX,AAAuB,cAAvBA,EAAclX,IAAI,EAClBkX,AAAuB,kBAAvBA,EAAclX,IAAI,EAClBkX,AAAuB,qBAAvBA,EAAclX,IAAI,AAAsB,EACtCkX,EACAha,KAAAA,EAEN,GAAIq2B,GACE74B,MAAMwT,OAAO,CAACilB,GAAO,CAEvB,IAAMK,EACJD,EAAgBJ,IAAI,EAAKI,CAAAA,EAAgBJ,IAAI,CAAG,EAAC,EACnD,IAAK,IAAM7d,KAAO6d,EACXK,EAAc3X,QAAQ,CAACvG,IAC1Bke,EAAcllB,IAAI,CAACgH,EAGzB,CAGF,IAAMib,EACJ,AAACrZ,GAAiBA,AAAuB,mBAAvBA,EAAclX,IAAI,CAEhCkX,EAAcqZ,YAAY,CAD1B,EAAE,CAKFkD,EACJvc,GAAiBA,AAAuB,mBAAvBA,EAAclX,IAAI,CAC/B,iBACAoQ,EAAUsjB,UAAU,CAEpBC,EAAiB,CAAC,CAACvjB,EAAUwjB,iBAAiB,CAEhDC,EAA0BnB,EAAe,SACzCoB,EAAc,EAImB,WAAnC,OAAOD,GACP,AAAkC,SAA3BX,GAKJW,CAAAA,AAA4B,gBAA5BA,GACCX,AAA2B,IAA3BA,GAEDW,AAA4B,aAA5BA,GACEX,CAAAA,EAAyB,GAAKA,AAA2B,KAA3BA,CAA+B,KAGhEP,EAAe,CAAC,kBAAkB,EAAEkB,EAAwB,mBAAmB,EAAEX,EAAuB,gCAAgC,CAAC,CACzIW,EAA0B32B,KAAAA,EAC1Bg2B,EAAyBh2B,KAAAA,GAI7B,IAAM62B,EAEJF,AAA4B,aAA5BA,GACAA,AAA4B,aAA5BA,GAGAJ,AAAuB,mBAAvBA,GACAA,AAAuB,kBAAvBA,EAOIO,EACJ,CAACP,GACD,CAACI,GACD,CAACX,GACD9iB,EAAU+J,YAAY,AAKtB0Z,AAA4B,iBAA5BA,GACA,AAAkC,SAA3BX,EAEPA,EAAyB,GAKzBhc,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAelX,IAAI,AAAD,IAAM,SACvB+zB,CAAAA,GAA+BC,CAA2B,GAE3Dd,CAAAA,EAAyB,GAIzBW,CAAAA,AAA4B,aAA5BA,GACAA,AAA4B,aAA5BA,CAAqC,GAErCC,CAAAA,EAAc,CAAC,OAAO,EAAED,EAAwB,CAAC,AAAD,EAGlDhB,EAAkBoB,AA5TnB,SACLC,CAAsB,CACtB5Z,CAAa,EAEb,GAAI,CACF,IAAI6Z,EAEJ,GAAID,AAAkB,KAAlBA,EACFC,E5CdwB,gB4CenB,GACL,AAAyB,UAAzB,OAAOD,GACP,CAAC92B,MAAM82B,IACPA,EAAgB,GAEhBC,EAAuBD,OAClB,GAAI,AAAyB,SAAlBA,EAChB,MAAM,qBAEL,CAFK,AAAIj2B,MACR,CAAC,0BAA0B,EAAEi2B,EAAc,MAAM,EAAE5Z,EAAM,yCAAyC,CAAC,EAD/F,qB,MAAA,O,WAAA,EAEN,GAEF,OAAO6Z,CACT,CAAE,MAAOtb,EAAU,CAEjB,GAAIA,aAAe5a,OAAS4a,EAAIrE,OAAO,CAACqH,QAAQ,CAAC,sBAC/C,MAAMhD,EAER,MACF,CACF,EAiSUqa,EACA9iB,EAAUkK,KAAK,EAGjB,IAAM8Z,EAAW1B,EAAe,WAC1B2B,EACJ,AAAyB,YAAzB,MAAOD,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAUrnB,GAAG,AAAD,EACfqnB,EACA,IAAI3mB,QAAQ2mB,GAAY,CAAC,GAEzBE,EACJD,EAAYtnB,GAAG,CAAC,kBAAoBsnB,EAAYtnB,GAAG,CAAC,UAEhDwnB,EAAsB,CAAC,CAAC,MAAO,OAAO,CAAC1Y,QAAQ,CACnD6W,AAAAA,CAAe,MAAfA,CAAAA,EAAAA,EAAe,SAAQ,EAAR,OAAfA,EAA0B9kB,WAAW,EAAC,GAAK,OAavC4mB,EAEJf,AAAsBv2B,KAAAA,GAAtBu2B,GAECI,CAAAA,AAA2B32B,KAAAA,GAA3B22B,GAGCA,AAA4B,YAA5BA,CAAoC,GAEtCX,AAA0Bh2B,KAAAA,GAA1Bg2B,EACIuB,EAGHD,GAGC,CAACpkB,EAAUskB,cAAc,EACzBJ,AAAAA,CAAAA,GAAwBC,CAAkB,GAC1ChB,GACAA,AAA+B,IAA/BA,EAAgB9Y,UAAU,CAE9B,GACE+Z,GACAtd,AAAkBha,KAAAA,IAAlBga,GACAA,AAAuB,cAAvBA,EAAclX,IAAI,CAQlB,OAJIuyB,IACFA,EAAYpF,OAAO,GACnBoF,EAAc,MAETrZ,GACLhC,EAAcyd,YAAY,CAC1B,WAIJ,OAAQlB,GACN,IAAK,iBACHK,EAAc,8BACd,KAEF,KAAK,gBACH,GACED,AAA4B,gBAA5BA,GACC,AAA2B,SAApBhB,GAAmCA,EAAkB,EAE7D,MAAM,qBAEL,CAFK,AAAI50B,MACR,CAAC,uCAAuC,EAAEg0B,EAAS,gDAAgD,CAAC,EADhG,qB,MAAA,O,WAAA,EAEN,GAEF6B,EAAc,6BACd,KAEF,KAAK,aACH,GAAID,AAA4B,aAA5BA,EACF,MAAM,qBAEL,CAFK,AAAI51B,MACR,CAAC,oCAAoC,EAAEg0B,EAAS,6CAA6C,CAAC,EAD1F,qB,MAAA,O,WAAA,EAEN,GAEF,KAEF,KAAK,cAED,CAAkC,SAA3BiB,GACPA,AAA2B,IAA3BA,CAA2B,IAE3BY,EAAc,2BACdjB,E5CnagB,W4C4atB,CA0BA,GAxBI,AAA2B,SAApBA,EACLY,AAAuB,kBAAvBA,GAA2CE,EAGpCF,AAAuB,qBAAvBA,GACTZ,EAAkB,EAClBiB,EAAc,iCACLH,GACTd,EAAkB,EAClBiB,EAAc,gBACLW,GACT5B,EAAkB,EAClBiB,EAAc,kBAGdA,EAAc,aACdjB,EAAkBU,EACdA,EAAgB9Y,UAAU,C5C/bZ,a4CgblBoY,E5ChbkB,W4CiblBiB,EAAc,8BAiBNA,GACVA,CAAAA,EAAc,CAAC,YAAY,EAAEjB,EAAgB,CAAC,AAAD,EAM7C,CAAEziB,CAAAA,EAAUgK,WAAW,EAAIyY,AAAoB,IAApBA,CAAoB,GAE/C,CAAC4B,GAIDlB,GACAV,EAAkBU,EAAgB9Y,UAAU,CAC5C,CAGA,GAAIoY,AAAoB,IAApBA,EAAuB,CACzB,GAAI3b,GAAiBA,AAAuB,cAAvBA,EAAclX,IAAI,CAKrC,OAJIuyB,IACFA,EAAYpF,OAAO,GACnBoF,EAAc,MAETrZ,GACLhC,EAAcyd,YAAY,CAC1B,WAGFza,GACE9J,EACA8G,EACA,CAAC,oBAAoB,EAAE2J,EAAM,CAAC,EAAEzQ,EAAUkK,KAAK,CAAC,CAAC,CAGvD,CAIIiZ,GAAmBL,IAA2BL,GAChDU,CAAAA,EAAgB9Y,UAAU,CAAGoY,CAAc,CAE/C,CAEA,IAAM+B,EACJ,AAA2B,UAA3B,OAAO/B,GAAgCA,EAAkB,EAGrD,CAAEld,iBAAAA,CAAgB,CAAE,CAAGvF,EAEvBY,EACJkG,AAAkBha,KAAAA,IAAlBga,GAA+BA,AAAuB,YAAvBA,EAAclX,IAAI,CAC7CkX,EACAha,KAAAA,EAEN,GACEyY,GACCif,CAAAA,GAAyB5jB,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAc6jB,wBAAwB,AAAD,CAAC,EAEhE,GAAI,CACF1D,EAAW,MAAMxb,EAAiBmf,gBAAgB,CAChD7C,EACAc,EAAkBlS,EAAwB1U,EAE9C,CAAE,MAAO0M,EAAK,CACZ3Z,QAAQ2H,KAAK,CAAC,mCAAoCga,EACpD,CAGF,IAAMkU,EAAW3kB,EAAU+X,WAAW,EAAI,CAC1C/X,CAAAA,EAAU+X,WAAW,CAAG4M,EAAW,EAEnC,IAAIC,EAAe,IAAMj3B,QAAQuK,OAAO,GAElC2sB,EAAkB,MACtBC,EACAtC,KAEA,IAAMuC,EAAqB,CACzB,QACA,cACA,UACA,YACA,YACA,SACA,OACA,WACA,WACA,iBACA,SACA,YAGID,EAAU,EAAE,CAAG,CAAC,SAAS,CAC9B,CAED,GAAInC,EAAgB,CAClB,IAAMqC,EAAoBvU,EACpBwU,EAA0B,CAC9BtZ,KAAOqZ,EAAiBE,OAAO,EAAIF,EAASrZ,IAAI,AAClD,EAEA,IAAK,IAAMiX,KAASmC,EAElBE,CAAU,CAACrC,EAAM,CAAGoC,CAAQ,CAACpC,EAAM,CAErCnS,EAAQ,IAAI4C,QAAQ2R,EAAS5Y,GAAG,CAAE6Y,EACpC,MAAO,GAAIlpB,EAAM,CACf,GAAM,CAAEmpB,QAAAA,CAAO,CAAEvZ,KAAAA,CAAI,CAAE5C,OAAAA,CAAM,CAAE,GAAGoc,EAAY,CAC5CppB,EACFA,EAAO,CACL,GAAGopB,CAAU,CACbxZ,KAAMuZ,GAAWvZ,EACjB5C,OAAQ+b,EAAUh4B,KAAAA,EAAYic,CAChC,CACF,CAGA,IAAMqc,EAAa,CACjB,GAAGrpB,CAAI,CACPqe,KAAM,C,GAAKre,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAMqe,IAAT,CAAeiL,UAAW,SAAUV,SAAAA,CAAS,CACvD,EAEA,OAAOhD,EAAYlR,EAAO2U,GACvB3e,IAAI,CAAC,MAAOiG,IAeX,GAdI,CAACoY,GAAW5C,GACd9K,GAAiBpX,EAAW,CAC1B7U,MAAO+2B,EACP9V,IAAKyV,EACL6B,YAAalB,GAAuBkB,EACpC4B,YACE7C,AAAoB,IAApBA,GAAyBD,EACrB,OACA,OACND,aAAAA,EACAtW,OAAQS,EAAIT,MAAM,CAClBiT,OAAQkG,EAAWlG,MAAM,EAAI,KAC/B,GAGAxS,AAAe,MAAfA,EAAIT,MAAM,EACV1G,GACAwb,GACCyD,CAAAA,GACC5jB,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAc6jB,wBAAwB,AAAD,CAAC,EACxC,CACA,IAAMV,EACJtB,G5CrlBY,WALA,Q4C4lBRA,EACA8C,EACJ9C,CAAAA,CAAAA,G5CzlBY,U4CylBoB,GAAYA,EAE9C,GAAI3b,GAAiBA,AAAuB,cAAvBA,EAAclX,IAAI,CAAkB,CAGvD,IAAM41B,EAAa,MAAM9Y,EAAI+Y,WAAW,GAElCC,EAAc,CAClB35B,QAASlF,OAAOue,WAAW,CAACsH,EAAI3gB,OAAO,CAACwS,OAAO,IAC/CoN,KAAM4C,OAAOxkB,IAAI,CAACy7B,GAAYjlB,QAAQ,CAAC,UACvC0L,OAAQS,EAAIT,MAAM,CAClBG,IAAKM,EAAIN,GAAG,AACd,EAuBA,OAlBA,MAAM7G,EAAiBxI,GAAG,CACxBgkB,EACA,CACEqB,KAAM7V,GAAAA,KAAqB,CAC3BoZ,KAAMD,EACNrb,WAAY0Z,CACd,EACA,CACET,WAAY,GACZjZ,WAAYkb,EACZ1D,SAAAA,EACA8C,SAAAA,EACA5B,KAAAA,CACF,GAEF,MAAM6B,IAGC,IAAI5Y,SAASwZ,EAAY,CAC9Bz5B,QAAS2gB,EAAI3gB,OAAO,CACpBkgB,OAAQS,EAAIT,MAAM,CAClBC,WAAYQ,EAAIR,UAAU,AAC5B,EACF,CAAO,CAML,GAAM,CAACH,EAASM,EAAQ,CAAGX,GAAcgB,GA6CzC,OAxCAX,EACG0Z,WAAW,GACXhf,IAAI,CAAC,MAAOgf,I,IAUX7kB,EATA,IAAM4kB,EAAajX,OAAOxkB,IAAI,CAAC07B,GAEzBC,EAAc,CAClB35B,QAASlF,OAAOue,WAAW,CAAC2G,EAAQhgB,OAAO,CAACwS,OAAO,IACnDoN,KAAM6Z,EAAWjlB,QAAQ,CAAC,UAC1B0L,OAAQF,EAAQE,MAAM,CACtBG,IAAKL,EAAQK,GAAG,AAClB,CAEAxL,AAAAA,OAAAA,GAAAA,AAAsC,MAAtCA,CAAAA,EAAAA,EAAc6jB,wBAAwB,AAAD,GAArC7jB,EAAwC7D,GAAG,CACzCgkB,EACA2E,GAGElB,GACF,MAAMjf,EAAiBxI,GAAG,CACxBgkB,EACA,CACEqB,KAAM7V,GAAAA,KAAqB,CAC3BoZ,KAAMD,EACNrb,WAAY0Z,CACd,EACA,CACET,WAAY,GACZjZ,WAAYkb,EACZ1D,SAAAA,EACA8C,SAAAA,EACA5B,KAAAA,CACF,EAGN,GACCpc,KAAK,CAAC,AAAClQ,GACN3H,QAAQqqB,IAAI,CAAC,4BAA6B1I,EAAOha,IAElDmvB,OAAO,CAAChB,GAEJvY,CACT,CACF,CAMA,OAFA,MAAMuY,IAEClY,CACT,GACC/F,KAAK,CAAC,AAAClQ,IAEN,MADAmuB,IACMnuB,CACR,EACJ,EAGIovB,EAAyB,GACzBC,EAAoB,GAExB,GAAI/E,GAAYxb,EAAkB,CAChC,IAAIwgB,EAYJ,GATEnlB,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAcolB,YAAY,AAAD,GACzBplB,EAAa6jB,wBAAwB,GAErCsB,EACEnlB,EAAa6jB,wBAAwB,CAAC9nB,GAAG,CAACokB,GAE5C+E,EAAoB,IAGlBtB,GAAyB,CAACuB,EAAiB,CAC7CnB,EAAe,MAAMrf,EAAiB0gB,IAAI,CAAClF,GAC3C,IAAMS,EAAQxhB,EAAUiD,oBAAoB,CACxC,KACA,MAAMsC,EAAiB5I,GAAG,CAACokB,EAAU,CACnCqB,KAAM5V,GAAAA,KAA0B,CAChCnC,WAAYoY,EACZZ,SAAAA,EACA8C,SAAAA,EACA5B,KAAAA,EACAmD,SAAU/F,EACVgG,WAAY,EACd,GAkBJ,GAhBI/B,GAIEtd,GAAiBA,AAAuB,cAAvBA,EAAclX,IAAI,EACrC,M3BltBL,IAAIjC,QAAQ,AAACpB,GAAM+c,aAAa/c,I2BstB3Bi1B,EACF,MAAMoD,IAGNpC,EAAsB,yCAGpBhB,AAAAA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAOv5B,KAAK,AAAD,GAAKu5B,EAAMv5B,KAAK,CAACm6B,IAAI,GAAK7V,GAAAA,KAAqB,EAG5D,GAAIvM,EAAUomB,YAAY,EAAI5E,EAAMsD,OAAO,CACzCe,EAAyB,OACpB,CACL,GAAIrE,EAAMsD,OAAO,GACf9kB,EAAUmF,kBAAkB,GAAK,CAAC,EAC9B,CAACnF,EAAUmF,kBAAkB,CAAC4b,EAAS,EAAE,CAC3C,IAAMsF,EAAoBxB,EAAgB,IACvCpe,IAAI,CAAC,MAAOyN,GAAc,EACzBvI,KAAM,MAAMuI,EAASuR,WAAW,GAChC15B,QAASmoB,EAASnoB,OAAO,CACzBkgB,OAAQiI,EAASjI,MAAM,CACvBC,WAAYgI,EAAShI,UAAU,AACjC,IACC0Z,OAAO,CAAC,KACP5lB,EAAUmF,kBAAkB,GAAK,CAAC,EAClC,OAAOnF,EAAUmF,kBAAkB,CAAC4b,GAAY,GAAG,AACrD,GAIFsF,EAAkB1f,KAAK,CAAC7X,QAAQ2H,KAAK,EAErCuJ,EAAUmF,kBAAkB,CAAC4b,EAAS,CAAGsF,CAC3C,CAGFN,EAAkBvE,EAAMv5B,KAAK,CAAC09B,IAAI,AACpC,EAEJ,CAEA,GAAII,EAAiB,CACf7D,GACF9K,GAAiBpX,EAAW,CAC1B7U,MAAO+2B,EACP9V,IAAKyV,EACL6B,YAAAA,EACA4B,YAAaQ,EAAoB,MAAQ,MACzCvD,aAAAA,EACAtW,OAAQ8Z,EAAgB9Z,MAAM,EAAI,IAClCiT,OAAQnjB,AAAAA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAMmjB,MAAM,AAAD,GAAK,KAC1B,GAGF,IAAMhL,EAAW,IAAIlI,SACnBuC,OAAOxkB,IAAI,CAACg8B,EAAgBpa,IAAI,CAAE,UAClC,CACE5f,QAASg6B,EAAgBh6B,OAAO,CAChCkgB,OAAQ8Z,EAAgB9Z,MAAM,AAChC,GAOF,OAJAplB,OAAOslB,cAAc,CAAC+H,EAAU,MAAO,CACrCjsB,MAAO89B,EAAgB3Z,GAAG,AAC5B,GAEO8H,CACT,CACF,CAEA,GAAIlU,EAAU0X,kBAAkB,EAAI3b,GAAQ,AAAgB,UAAhB,OAAOA,EAAmB,CACpE,GAAM,CAAE4T,MAAAA,CAAK,CAAE,CAAG5T,EAKlB,GAAI4T,AAAU,aAAVA,EAAsB,CAExB,GAAI7I,GAAiBA,AAAuB,cAAvBA,EAAclX,IAAI,CAKrC,OAJIuyB,IACFA,EAAYpF,OAAO,GACnBoF,EAAc,MAETrZ,GACLhC,EAAcyd,YAAY,CAC1B,WAGFza,GACE9J,EACA8G,EACA,CAAC,eAAe,EAAE2J,EAAM,CAAC,EAAEzQ,EAAUkK,KAAK,CAAC,CAAC,CAGlD,CAEA,IAAMoc,EAAgB,SAAUvqB,EAC1B,CAAEqe,KAAAA,EAAO,CAAC,CAAC,CAAE,CAAGre,EACtB,GACE,AAA2B,UAA3B,OAAOqe,EAAK/P,UAAU,EACtB8Y,GACA/I,EAAK/P,UAAU,CAAG8Y,EAAgB9Y,UAAU,CAC5C,CACA,GAAI+P,AAAoB,IAApBA,EAAK/P,UAAU,CAAQ,CAEzB,GAAIvD,GAAiBA,AAAuB,cAAvBA,EAAclX,IAAI,CACrC,OAAOkZ,GACLhC,EAAcyd,YAAY,CAC1B,WAGFza,GACE9J,EACA8G,EACA,CAAC,oBAAoB,EAAE2J,EAAM,CAAC,EAAEzQ,EAAUkK,KAAK,CAAC,CAAC,CAGvD,CAEKlK,EAAUgK,WAAW,EAAIoQ,AAAoB,IAApBA,EAAK/P,UAAU,EAC3C8Y,CAAAA,EAAgB9Y,UAAU,CAAG+P,EAAK/P,UAAU,AAAD,CAE/C,CACIic,GAAe,OAAOvqB,EAAKqe,IAAI,AACrC,CAKA,GAAI2G,CAAAA,IAAY8E,EA+Dd,OAAOhB,EAAgB,GAAOrC,EA/DQ,EACtC,IAAM+D,EAAuBxF,CAC7B/gB,CAAAA,EAAUmF,kBAAkB,GAAK,CAAC,EAClC,IAAIkhB,EACFrmB,EAAUmF,kBAAkB,CAACohB,EAAqB,CAEpD,GAAIF,EAAmB,CACrB,IAAMG,EAKF,MAAMH,EACV,OAAO,IAAIra,SAASwa,EAAkB7a,IAAI,CAAE,CAC1C5f,QAASy6B,EAAkBz6B,OAAO,CAClCkgB,OAAQua,EAAkBva,MAAM,CAChCC,WAAYsa,EAAkBta,UAAU,AAC1C,EACF,CAUA,IAAMua,EAAkB5B,EAAgB,GAAMrC,GAK3C/b,IAAI,CAACiF,IA4BR,MAJA2a,AAtBAA,CAAAA,EAAoBI,EACjBhgB,IAAI,CAAC,MAAOwQ,IACX,IAAM/C,EAAW+C,CAAS,CAAC,EAAE,CAC7B,MAAO,CACLtL,KAAM,MAAMuI,EAASuR,WAAW,GAChC15B,QAASmoB,EAASnoB,OAAO,CACzBkgB,OAAQiI,EAASjI,MAAM,CACvBC,WAAYgI,EAAShI,UAAU,AACjC,CACF,GACC0Z,OAAO,CAAC,K,IAGF5lB,EAAD,CAA6B,MAA5BA,CAAAA,EAAAA,EAAUmF,kBAAkB,AAAD,EAAC,OAA5BnF,CAA8B,CAACumB,EAAqB,AAAD,GAIxD,OAAOvmB,EAAUmF,kBAAkB,CAACohB,EAAqB,AAC3D,EAAC,EAIe5f,KAAK,CAAC,KAAO,GAE/B3G,EAAUmF,kBAAkB,CAACohB,EAAqB,CAAGF,EAE9CI,EAAgBhgB,IAAI,CAAC,AAACwQ,GAAcA,CAAS,CAAC,EAAE,CACzD,CAGF,GAGF,GAAIkL,EACF,GAAI,CACF,OAAO,MAAMz3B,CACf,QAAU,CACJy3B,GACFA,EAAYpF,OAAO,EAEvB,CAEF,OAAOryB,CACT,EAWA,OALAk3B,EAAQ8E,aAAa,CAAG,GACxB9E,EAAQ+E,oBAAoB,CAAG,IAAM1mB,EACrC2hB,EAAQgF,kBAAkB,CAAGjF,EAC3BxlB,UAAsC,CAACgb,GAAkB,CAAG,GAEvDyK,CACT,EAY0CnkB,EAAUxR,EACpD,EiBrsBe,CACTgU,iBAAkB,IAAI,CAACA,gBAAgB,CACvC8G,qBAAsB,IAAI,CAACA,oBAAoB,AACjD,GAEA,IAAM8f,EAA2C,CAC/CC,OAAQ73B,EAAQ63B,MAAM,CAClBC,AD/OH,SACLjJ,CAAwB,CACxB9d,CAAoB,MAqGpB8d,EACA9d,EApGA,IAAM8G,EAAgBC,EAAAA,oBAAAA,CAAAA,QAA6B,GACnD,GAAID,EACF,OAAQA,EAAclX,IAAI,EACxB,IAAK,YACL,IAAK,gBACL,IAAK,mBACH,OAAOo3B,AAkDf,SACElJ,CAAwB,CACxB9d,CAAoB,CACpB0K,CAA8B,EAE9B,IAAMuc,EAAiBjnB,EAAUknB,mBAAmB,CACpD,GAAID,EAAgB,CAClB,IAAIE,EAAwB,GAC5B,IAAK,IAAMn/B,KAAO81B,EAChB,GAAImJ,EAAejqB,GAAG,CAAChV,GAAM,CAC3Bm/B,EAAwB,GACxB,KACF,CAGF,GAAIA,QAEF,AAAIzc,AAAwB,cAAxBA,EAAe9a,IAAI,CAEdw3B,AAwCf,SACEtJ,CAAwB,CACxB5T,CAAa,CACbQ,CAAoC,EAEpC,IAAMqT,EAAeH,GAAajhB,GAAG,CAACmhB,GACtC,GAAIC,EACF,OAAOA,EAGT,IAAM1Y,EAAUyD,GACd4B,EAAe6Z,YAAY,CAC3B,YAiCF,OA/BA3G,GAAa7gB,GAAG,CAAC+gB,EAAkBzY,GAEnCxe,OAAO6W,IAAI,CAACogB,GAAkB1f,OAAO,CAAC,AAACxB,IACjCugB,GAAoB,GAAG,CAACvgB,IAI1B/V,OAAOslB,cAAc,CAAC9G,EAASzI,EAAM,CACnCD,MACE,IAAMkM,EAAaoU,GAA6B,SAAUrgB,GACpDnG,EAAQ2nB,GAAwBlU,EAAOrB,GAC7C8B,GACET,EACArB,EACApS,EACAiU,EAEJ,EACA3N,IAAIsqB,CAAQ,EACVxgC,OAAOslB,cAAc,CAAC9G,EAASzI,EAAM,CACnC3U,MAAOo/B,EACP3Q,SAAU,GACV4Q,WAAY,EACd,EACF,EACAA,WAAY,GACZC,aAAc,EAChB,EAEJ,GAEOliB,CACT,EArFUyY,EACA9d,EAAUkK,KAAK,CACfQ,GAOG8c,AA8Eb,SACE1J,CAAwB,CACxBmJ,CAAmC,CACnCjnB,CAAoB,CACpB0K,CAAwD,EAExD,IAAMqT,EAAeH,GAAajhB,GAAG,CAACmhB,GACtC,GAAIC,EACF,OAAOA,EAGT,IAAM0J,EAAsB,CAAE,GAAG3J,CAAgB,AAAC,EAK5CzY,EAAU1X,QAAQuK,OAAO,CAACuvB,GA6EhC,OA5EA7J,GAAa7gB,GAAG,CAAC+gB,EAAkBzY,GAEnCxe,OAAO6W,IAAI,CAACogB,GAAkB1f,OAAO,CAAC,AAACxB,IACjCugB,GAAoB,GAAG,CAACvgB,KAItBqqB,EAAejqB,GAAG,CAACJ,IACrB/V,OAAOslB,cAAc,CAACsb,EAAqB7qB,EAAM,CAC/CD,MACE,IAAMkM,EAAaoU,GAA6B,SAAUrgB,EAOtD8N,AAAwB,mBAAxBA,EAAe9a,IAAI,CAErBua,GACEnK,EAAUkK,KAAK,CACfrB,EACA6B,EAAeN,eAAe,EAIhCK,GACE5B,EACA7I,EACA0K,EAGN,EACA4c,WAAY,EACd,GACAzgC,OAAOslB,cAAc,CAAC9G,EAASzI,EAAM,CACnCD,MACE,IAAMkM,EAAaoU,GAA6B,SAAUrgB,EAOtD8N,AAAwB,mBAAxBA,EAAe9a,IAAI,CAErBua,GACEnK,EAAUkK,KAAK,CACfrB,EACA6B,EAAeN,eAAe,EAIhCK,GACE5B,EACA7I,EACA0K,EAGN,EACA3N,IAAIsqB,CAAQ,EACVxgC,OAAOslB,cAAc,CAAC9G,EAASzI,EAAM,CACnC3U,MAAOo/B,EACP3Q,SAAU,GACV4Q,WAAY,EACd,EACF,EACAA,WAAY,GACZC,aAAc,EAChB,IAEEliB,CAAe,CAACzI,EAAK,CAAGkhB,CAAgB,CAAClhB,EAAK,CAGtD,GAEOyI,CACT,EA3KQyY,EACAmJ,EACAjnB,EACA0K,EAGN,CAGA,OAAOmT,GAA0BC,EACnC,EA1FqCA,EAAkB9d,EAAW8G,EAG9D,CAEF,OAwFAgX,EAxF0BA,EA2F1B,AAA+C9d,CAF/CA,EAzF4CA,GA2Fa0nB,iBAAiB,CAMjE7J,GAA0BC,GAL1B6J,AAoLX,SACE7J,CAAwB,CACxBvZ,CAAgB,EAEhB,IAAMwZ,EAAeH,GAAajhB,GAAG,CAACmhB,GACtC,GAAIC,EACF,OAAOA,EAMT,IAAM1Y,EAAU,IAAI1X,QAAgB,AAACuK,GACnCkR,GAAkB,IAAMlR,EAAQ4lB,KAG5B8J,EAAoB,IAAI5sB,IACxB6sB,EAAqC,EAAE,CAE7ChhC,OAAO6W,IAAI,CAACogB,GAAkB1f,OAAO,CAAC,AAACxB,IACjCugB,GAAoB,GAAG,CAACvgB,GAG1BirB,EAAoB3pB,IAAI,CAACtB,IAEzBgrB,EAAkBnnB,GAAG,CAAC7D,GACpByI,CAAe,CAACzI,EAAK,CAAGkhB,CAAgB,CAAClhB,EAAK,CAEpD,GAEA,IAAMkrB,EAAiB,IAAIxqB,MAAM+H,EAAS,CACxC1I,IAAIlT,CAAM,CAAEmT,CAAI,CAAEC,CAAQ,EACxB,GAAI,AAAgB,UAAhB,OAAOD,GAGPgrB,EAAkB5qB,GAAG,CAACJ,GACtB,CACA,IAAMiM,EAAaoU,GAA6B,SAAUrgB,GAC1DohB,GAAUzZ,EAAM2F,KAAK,CAAErB,EACzB,CAEF,OAAOnM,EAAe,GAAG,CAACjT,EAAQmT,EAAMC,EAC1C,EACAE,KAAItT,EAAQmT,EAAM3U,EAAO4U,KACH,UAAhB,OAAOD,GACTgrB,EAAkBzpB,MAAM,CAACvB,GAEpBF,EAAe,GAAG,CAACjT,EAAQmT,EAAM3U,EAAO4U,IAEjDkrB,QAAQt+B,IAENu0B,GAAUzZ,EAAM2F,KAAK,CADF,oCACgB2d,GAC5Bv1B,QAAQy1B,OAAO,CAACt+B,GAE3B,GAGA,OADAm0B,GAAa7gB,GAAG,CAAC+gB,EAAkBgK,GAC5BA,CACT,EA7OMhK,EACA9d,EA7FN,ECgOYgoB,AGtTL,SACL1Y,CAAqB,EAErB,IAAMwX,EAA4C,CAAC,EAEnD,IAAK,GAAM,CAAC9+B,EAAKC,EAAM,GAAIpB,OAAO0X,OAAO,CAAC+Q,GACnB,SAAVrnB,GACX6+B,CAAAA,CAAM,CAAC9+B,EAAI,CAAGC,CAAI,EAGpB,OAAO6+B,CACT,EH2SmC73B,EAAQ63B,MAAM,EACrC9mB,GAEFlT,KAAAA,CACN,EAEI4d,EAAwC,KAG5C,GAAI,CACF,GAAIgN,EAAoB,CACtB,IAAMuQ,EAAqB,IAAI,CAAC3rB,QAAQ,CAAC+N,UAAU,CAC7C6d,EAIJD,AAAuB,KAAvBA,GAAgCA,AAAuBn7B,KAAAA,IAAvBm7B,E7DvSZ,W6DyShBA,EAEN,GAAI3H,EAAkB,KA0ChB6H,EAvBJ,IAAMC,EAAwB,IAAIjU,gBAC9BkU,EAA6B,GAC3BlG,EAAc,IAAI9F,GACpBjS,EAAkBX,GAA2B3c,KAAAA,GAE3Cw7B,EACH5d,EAAiB,CAChB9a,KAAM,YACNkR,MAAO,SACPqf,aAAcA,EACdoE,aAAc6D,EAAsBrf,MAAM,CAC1CkC,WAAYmd,EACZjG,YAAAA,EAGA/X,gBAAAA,EACAC,WAAY6d,EACZK,O7D/UgB,W6DgVhBC,M7DhVgB,W6DiVhBzF,KAAM,IAAI5C,EAAa,CACvBsI,yBAA0B,IAC5B,EAGF,GAAI,CACFN,EAAoB,IAAI,CAACphB,oBAAoB,CAAC1Y,GAAG,CAC/Ci6B,EACArI,EACAG,EACAyG,EAEJ,CAAE,MAAOpe,EAAK,CACR2f,EAAsBrf,MAAM,CAAC8F,OAAO,CAGtCwZ,EAA6B,GAE7BlvB,CAAAA,QAAQsY,GAAG,CAAC+F,gBAAgB,EAC5Bre,QAAQsY,GAAG,CAACiX,sBAAsB,AAAD,GAEjC/M,GAA0ClT,EAAKzI,EAAUkK,KAAK,CAElE,CA0BA,GAxB+B,UAA7B,OAAOie,GACPA,AAAsB,OAAtBA,GACA,AAA2C,YAA3C,OAAQA,EAA0B1hB,IAAI,EAIpC0hB,EAA8C1hB,IAAI,CAClD,KAAO,EACP,AAACgC,IACK2f,EAAsBrf,MAAM,CAAC8F,OAAO,CAGtCwZ,EAA6B,GACpBlvB,QAAQsY,GAAG,CAAC+F,gBAAgB,EACrCmE,GACElT,EACAzI,EAAUkK,KAAK,CAGrB,GAGJ,MAAMiY,EAAYtF,UAAU,GAExBwL,EAA4B,CAG9B,IAAMM,G3C9ThBtI,E2C8TsDjW,E3C5T/C,AAAgC,MAAhCiW,CAAAA,EAAAA,EAAc1W,eAAe,CAAC,EAAE,AAAD,EAAC,OAAhC0W,EAAkCxX,UAAU,E2C6TzC,GAAI8f,EACF,MAAM,qBAEL,CAFK,IAAItgB,GACR,CAAC,MAAM,EAAErI,EAAUkK,KAAK,CAAC,mDAAmD,EAAEye,EAAc,6EAA6E,CAAC,EADtK,qB,MAAA,O,WAAA,EAEN,EAKA,OAHA75B,QAAQ2H,KAAK,CACX,+HAEI,qBAEL,CAFK,IAAI4R,GACR,CAAC,MAAM,EAAErI,EAAUkK,KAAK,CAAC,yIAAyI,CAAC,EAD/J,qB,MAAA,O,WAAA,EAEN,EAEJ,CAKA,IAAM0e,EAAkB,IAAIzU,gBAC5B/J,EAAkBX,GAA2B3c,KAAAA,GAE7C,IAAM+7B,EAA4Cne,EAAiB,CACjE9a,KAAM,YACNkR,MAAO,SACPqf,aAAcA,EACdoE,aAAcqE,EAAgB7f,MAAM,CACpCkC,WAAY2d,EACZzG,YAAa,KACb/X,gBAAAA,EACAC,WAAY6d,EACZK,O7DnakB,W6DoalBC,M7DpakB,W6DqalBzF,KAAM,IAAI5C,EAAa,CACvBsI,yBAA0B,IAC5B,EAEIK,EAAkB,GAsDtB,GArDApc,EAAM,MAAM,IAAI/e,QAAQ,CAACuK,EAASC,KAChCiR,GAAkB,UAChB,GAAI,CACF,IAAM1e,EAAS,MAAO,IAAI,CAACqc,oBAAoB,CAAC1Y,GAAG,CACjDw6B,EACA5I,EACAG,EACAyG,GAEF,GAAIiC,EAEF,OACK,GAAI,CAAEp+B,CAAAA,aAAkBshB,QAAO,EAAI,CAExC9T,EAAQxN,GACR,MACF,CAEAo+B,EAAkB,GAElB,IAAIC,EAAc,GAClBr+B,EAAO+6B,WAAW,GAAGhf,IAAI,CAAC,AAACkF,IACpBod,IACHA,EAAc,GAEd7wB,EACE,IAAI8T,SAASL,EAAM,CACjB5f,QAASrB,EAAOqB,OAAO,CACvBkgB,OAAQvhB,EAAOuhB,MAAM,CACrBC,WAAYxhB,EAAOwhB,UAAU,AAC/B,IAGN,EAAG/T,GACHiR,GAAkB,KACX2f,IACHA,EAAc,GACdH,EAAgB1d,KAAK,GACrB/S,EAAO6wB,GAAqBhpB,EAAUkK,KAAK,GAE/C,EACF,CAAE,MAAOzB,EAAK,CACZtQ,EAAOsQ,EACT,CACF,GACAW,GAAkB,KACX0f,IACHA,EAAkB,GAClBF,EAAgB1d,KAAK,GACrB/S,EAAO6wB,GAAqBhpB,EAAUkK,KAAK,GAE/C,EACF,GACI0e,EAAgB7f,MAAM,CAAC8F,OAAO,CAEhC,MAAMma,GAAqBhpB,EAAUkK,KAAK,EAK1C0e,EAAgB1d,KAAK,EAEzB,MACER,EAAiB,CACf9a,KAAM,mBACNkR,MAAO,SACPqf,aAAcA,EACd9V,WAAY6d,EACZK,O7D9ekB,W6D+elBC,M7D/ekB,W6DgflBzF,KAAM,IAAI5C,EAAa,AACzB,EAEAzT,EAAM,MAAM3F,EAAAA,oBAAAA,CAAAA,GAAwB,CAClC2D,EACAuV,EACAG,EACAyG,EAGN,MACEna,EAAM,MAAM3F,EAAAA,oBAAAA,CAAAA,GAAwB,CAClCnG,EACAqf,EACAG,EACAyG,EAGN,CAAE,MAAOpe,EAAK,CACZ,GAAI6S,GAAgB7S,GAAM,CACxB,IAAM2D,EIjeZ,AAAKkP,GJieqC7S,GI7dnChS,AJ6dmCgS,EI7d7BF,MAAM,CAACN,KAAK,CAAC,KAAKE,KAAK,CAAC,EAAG,IAAIpK,IAAI,CAAC,KAJb,KJke9B,GAAI,CAACqO,EACH,MAAM,qBAAsD,CAAtD,AAAIve,MAAM,6CAAV,qB,MAAA,O,WAAA,EAAqD,GAK7D,IAAM9B,EAAU,IAAIsR,QAAQ,CAAE4rB,SAAU7c,CAAI,GAW5C,MAL0B,YAAtBxL,EAAahR,IAAI,EACnBoP,EAAqBjT,EAAS6U,EAAa3B,cAAc,EAIpD,IAAI+M,SAAS,KAAM,CAIxBC,OAAQiU,EAAYgJ,QAAQ,CACxB9N,GAAAA,QAA2B,CAC3B+N,AI1eP,SAAwC1yB,CAAoB,EACjE,GAAI,CAAC6kB,GAAgB7kB,GACnB,MAAM,qBAAiC,CAAjC,AAAI5I,MAAM,wBAAV,qB,MAAA,O,WAAA,EAAgC,GAGxC,OAAOxE,OAAOoN,EAAM8R,MAAM,CAACN,KAAK,CAAC,KAAKyT,EAAE,CAAC,IAC3C,EJoe6CjT,GACnC1c,QAAAA,CACF,EACF,CAAO,GAAImvB,GAA0BzS,GAEnC,OAAO,IAAIuD,SAAS,KAAM,CAAEC,OZ5hB3B5iB,OADYoN,AY4hBkCgS,EZ5hB5BF,MAAM,CAACN,KAAK,CAAC,IAAI,CAAC,EAAE,CY6hBQ,EAGjD,OAAMQ,CACR,CAGA,GAAI,CAAEiE,CAAAA,aAAeV,QAAO,EAC1B,MAAM,qBAEL,CAFK,AAAIne,MACR,CAAC,4CAA4C,EAAE,IAAI,CAAC6wB,gBAAgB,CAAC,0FAA0F,CAAC,EAD5J,qB,MAAA,O,WAAA,EAEN,EAGFzvB,CAAAA,EAAQsxB,UAAU,CAAC5I,YAAY,CAAG3X,EAAU2X,YAAY,CAExD1oB,EAAQsxB,UAAU,CAAC6I,gBAAgB,CAAGz7B,QAAQjE,GAAG,CAAC,C,AACtB,MAA1BsW,CAAAA,EAAAA,EAAUuF,gBAAgB,AAAD,EAAC,OAA1BvF,EAA4BwF,aAAa,CACvCxF,EAAU+E,eAAe,EAAI,EAAE,KAE9Ble,OAAO4X,MAAM,CAACuB,EAAUmF,kBAAkB,EAAI,CAAC,GACnD,EAAEygB,OAAO,CAAC,KACLzsB,QAAQsY,GAAG,CAAC4X,wBAAwB,EACtCv6B,QAAQyqB,GAAG,CACT,4CACA3Y,EAAawL,GAAG,CAGtB,GAEI1B,IACFzb,EAAQsxB,UAAU,CAAC6C,aAAa,CAAG,AAAmB,MAAnB1Y,CAAAA,EAAAA,EAAeqY,IAAI,AAAD,EAAC,OAAnBrY,EAAqB3M,IAAI,CAAC,KAC7D9O,EAAQsxB,UAAU,CAAC+I,mBAAmB,CAAG5e,EAAeL,UAAU,CAClEpb,EAAQsxB,UAAU,CAACgJ,eAAe,CAAG7e,EAAe6d,MAAM,CAC1Dt5B,EAAQsxB,UAAU,CAACiJ,cAAc,CAAG9e,EAAe8d,KAAK,EAM1D,IAAMz8B,EAAU,IAAIsR,QAAQqP,EAAI3gB,OAAO,QACvC,AACE6U,AAAsB,YAAtBA,EAAahR,IAAI,EACjBoP,EAAqBjT,EAAS6U,EAAa3B,cAAc,EAElD,IAAI+M,SAASU,EAAIf,IAAI,CAAE,CAC5BM,OAAQS,EAAIT,MAAM,CAClBC,WAAYQ,EAAIR,UAAU,CAC1BngB,QAAAA,CACF,GAGK2gB,CACT,CAEA,MAAa+c,OACXzmB,CAAgB,CAChB/T,CAAoC,CACjB,KzD7frBmd,EyD+fE,IAAM6T,EAAU,IAAI,CAAC/nB,OAAO,CAAC8K,EAAIkc,MAAM,EAGjCwK,EAA4C,CAEhDxC,oBAAqB,KACrByC,KAAM,IAAI,CAACptB,UAAU,CAACotB,IAAI,CAC1BpJ,WAAYtxB,EAAQsxB,UAAU,CAC9BjP,QAASriB,EAAQ26B,aAAa,CAACtY,OAAO,AACxC,CAGAoY,CAAAA,EAAwBnJ,UAAU,CAAC+C,UAAU,CAAG,IAAI,CAAChnB,QAAQ,CAACgnB,UAAU,CAExE,IAAMpD,EAA2B,CAC/B2J,WAAY,GACZX,SK9lBGY,AAhDF,SACL9mB,CAAoD,MAQhD+mB,EACA9T,CAEAjT,CAAAA,EAAIjX,OAAO,YAAYsR,SACzB0sB,EAAW/mB,EAAIjX,OAAO,CAAC4Q,GAAG,CAACH,EAAc,WAAW,KAAO,KAC3DyZ,EAAcjT,EAAIjX,OAAO,CAAC4Q,GAAG,CAAC,kBAE9BotB,EAAY/mB,EAAIjX,OAAO,CAACyQ,EAAc,WAAW,GAAG,EAAe,KACnEyZ,EAAcjT,EAAIjX,OAAO,CAAC,eAAe,EAAI,MAG/C,IAAMi+B,EAAqBziC,CAAAA,CACzByb,CAAAA,AAAe,SAAfA,EAAIkc,MAAM,EAAejJ,AAAgB,sCAAhBA,CAAkD,EAEvEgU,EAAoB1iC,CAAAA,CACxByb,CAAAA,AAAe,SAAfA,EAAIkc,MAAM,EAAejJ,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAalO,UAAU,CAAC,sBAAqB,CAAC,EAEnEmiB,EAAgB3iC,CAAAA,CACpBwiC,CAAAA,AAAaj9B,KAAAA,IAAbi9B,GACE,AAAoB,UAApB,OAAOA,GACP/mB,AAAe,SAAfA,EAAIkc,MAAM,AAAU,EAOxB,MAAO,CACL6K,SAAAA,EACAC,mBAAAA,EACAC,kBAAAA,EACAC,cAAAA,EACAC,eATqB5iC,CAAAA,CACrB2iC,CAAAA,GAAiBF,GAAsBC,CAAgB,CASzD,CACF,ELmmBkCjnB,GK9lBWmnB,cAAc,AL+lBvD,EAEMhK,EAAeiK,AhD1nBlB,SACLT,CAAY,CACZvd,CAGC,CACD8a,CAA+C,EAG/C,IAAMmD,EAAoB,EAAE,CAM5B,IAAK,IAAInlB,KADW0C,EAAe+hB,GAEjCzkB,EAAM,CAAC,EAAEnE,EAA2B,EAAEmE,EAAI,CAAC,CAC3CmlB,EAAQnsB,IAAI,CAACgH,GAKf,GAAIkH,EAAIvE,QAAQ,CAA6B,CAC3C,IAAM3C,EAAM,CAAC,EAAEnE,EAA2B,EAAEqL,EAAIvE,QAAQ,CAAC,CAAC,CAC1DwiB,EAAQnsB,IAAI,CAACgH,EACf,CAEA,OAAOmlB,CACT,EgD+lBM,IAAI,CAAC9tB,UAAU,CAACotB,IAAI,CACpB3mB,EAAIsnB,OAAO,CAEX,GAGI1pB,GzDzhBRwL,EyD2hBIpJ,EAAIsnB,OAAO,CzDthBRC,AAeT,SACEzpB,CAA4B,CAC5BkC,CAA0B,CAC1B0J,CAA0B,CAC1BN,CAA0B,CAC1B+T,CAA4C,CAC5CxgB,CAA8C,CAC9C6qB,CAAwD,CACxDznB,CAA+C,CAC/CijB,CAA4C,CAC5CvB,CAAoE,EAEpE,SAASgG,EAAuB5rB,CAAiB,EAC3C6N,GACFA,EAAIge,SAAS,CAAC,aAAc7rB,EAEhC,CAEA,IAAM8Q,EAMF,CAAC,EAEL,MAAO,CACL/f,KAAM,UACNkR,MAAAA,EACAqf,aAAcA,GAAgB,EAAE,CAIhC/T,IAAK,CAAEvE,SAAUuE,EAAIvE,QAAQ,CAAE8K,OAAQvG,EAAIuG,MAAM,EAAI,EAAG,EACxD,IAAI5mB,SAAU,CAOZ,OANK4jB,EAAM5jB,OAAO,EAGhB4jB,CAAAA,EAAM5jB,OAAO,CAAG4+B,AArKxB,SAAoB5+B,CAAsC,EACxD,IAAM6+B,EAAUxtB,EAAe,IAAI,CAACrR,GACpC,IAAK,IAAM5B,KAAUsS,EACnBmuB,EAAQzsB,MAAM,CAAChU,EAAOqT,WAAW,IAGnC,OAAOJ,EAAe,IAAI,CAACwtB,EAC7B,EA8JmC5nB,EAAIjX,OAAO,GAGjC4jB,EAAM5jB,OAAO,AACtB,EACA,IAAI8S,SAAU,CACZ,GAAI,CAAC8Q,EAAM9Q,OAAO,CAAE,CAGlB,IAAMgsB,EAAiB,IAAIlhC,EAAAA,cAAcA,CACvCyT,EAAe,IAAI,CAAC4F,EAAIjX,OAAO,GAGjC8X,EAAuBb,EAAK6nB,GAI5Blb,EAAM9Q,OAAO,CAAGD,EAAsB,IAAI,CAACisB,EAC7C,CAEA,OAAOlb,EAAM9Q,OAAO,AACtB,EACA,IAAIA,QAAQ5W,MAA+B,CACzC0nB,EAAM9Q,OAAO,CAAG5W,KAClB,EACA,IAAIgX,gBAAiB,CACnB,GAAI,CAAC0Q,EAAM1Q,cAAc,CAAE,CACzB,IAAMA,EAAiB6rB,AAvL/B,SACE/+B,CAAsC,CACtC4T,CAA6C,EAE7C,IAAMd,EAAU,IAAIlV,EAAAA,cAAcA,CAACyT,EAAe,IAAI,CAACrR,IACvD,OAAO0T,EAA6B,IAAI,CAACZ,EAASc,EACpD,EAkLUqD,EAAIjX,OAAO,CACX4T,GAAoB+M,CAAAA,EAAM+d,EAAyB39B,KAAAA,CAAQ,GAG7D+W,EAAuBb,EAAK/D,GAE5B0Q,EAAM1Q,cAAc,CAAGA,CACzB,CACA,OAAO0Q,EAAM1Q,cAAc,AAC7B,EACA,IAAI8rB,yBAA0B,CAC5B,GAAI,CAACpb,EAAMob,uBAAuB,CAAE,CAClC,IAAMA,EAA0BC,ALhDjC,SACLprB,CAAgC,EAEhC,IAAMY,EAAiB,IAAIlD,MAAMsC,EAAiB,CAChDjD,IAAIlT,CAAM,CAAEmT,CAAI,CAAEC,CAAQ,EACxB,OAAQD,GACN,IAAK,SACH,OAAO,SAAU,GAAGvS,CAAiC,EAGnD,OAFAqW,EAA6B,oBAC7BjX,EAAO0U,MAAM,IAAI9T,GACVmW,CACT,CACF,KAAK,MACH,OAAO,SAAU,GAAGnW,CAAmB,EAGrC,OAFAqW,EAA6B,iBAC7BjX,EAAOsT,GAAG,IAAI1S,GACPmW,CACT,CAEF,SACE,OAAO9D,EAAe,GAAG,CAACjT,EAAQmT,EAAMC,EAC5C,CACF,CACF,GACA,OAAO2D,CACT,EKwBU,IAAI,CAACvB,cAAc,CAErB0Q,CAAAA,EAAMob,uBAAuB,CAAGA,CAClC,CACA,OAAOpb,EAAMob,uBAAuB,AACtC,EACA,IAAIE,WAAY,CAUd,OATKtb,EAAMsb,SAAS,EAClBtb,CAAAA,EAAMsb,SAAS,CAAG,IAAInoB,EACpBC,EACAC,EACA,IAAI,CAACnE,OAAO,CACZ,IAAI,CAACI,cAAc,GAIhB0Q,EAAMsb,SAAS,AACxB,EACAT,sBAAuBA,GAAyB,KAChDxE,aAAAA,EACAvB,yBACEA,GACCtoB,WAAmB+uB,0BAA0B,AAClD,CACF,EApHI,SyDmhBEloB,EzDjhBFlW,KAAAA,EACAsf,EyDkhBE+T,EACArzB,KAAAA,EzDhhBFA,KAAAA,EyDihBEmC,EAAQk8B,iBAAiB,CAACC,OAAO,CzD/gBnC,GACAt+B,KAAAA,IyDihBMkT,EAAYqrB,AM7lBf,SAAyB,CAC9B1B,KAAAA,CAAI,CACJzC,oBAAAA,CAAmB,CACnB3G,WAAAA,CAAU,CACVjJ,kBAAAA,CAAiB,CACjBoQ,kBAAAA,CAAiB,CACjBpW,QAAAA,CAAO,CACU,MC3EgB1oB,EDkGjC,IAAM2b,EAAmB,CACvBmT,mBALA,CAAC6I,EAAW+K,uBAAuB,EACnC,CAAC/K,EAAWmC,WAAW,EACvB,CAACnC,EAAW4J,cAAc,CAI1BR,KAAAA,EACAzC,oBAAAA,EACAhd,MCrGKthB,CAD0BA,ECoB/BshB,AFkFwByf,EElFlB1hB,KAAK,CAAC,KAAKsjB,MAAM,CAAC,CAAC1jB,EAAUqI,EAAS9a,EAAO6a,IAEjD,AAAKC,EAKL,A1D3BkB,MAAfA,A0D2BgBA,C1D3BT,CAAC,EAAE,EAAYA,A0D2BNA,E1D3Bc7L,QAAQ,CAAC,M0DgCtC6L,AAAe,MAAfA,CAAO,CAAC,EAAE,EAMXA,AAAAA,CAAAA,AAAY,SAAZA,GAAsBA,AAAY,UAAZA,CAAkB,GACzC9a,IAAU6a,EAAS5Q,MAAM,CAAG,EAXrBwI,EAgBCA,EAAS,IAAGqI,EArBbrI,EAsBR,KD5COE,UAAU,CAAC,KAAOnf,EAAQ,IAAGA,EDsGvC2c,iBAGEgb,EAAWhb,gBAAgB,EAAKpJ,WAAmBqvB,kBAAkB,CACvEC,kBAAmBlL,EAAWkL,iBAAiB,CAC/CrF,aAAc7F,EAAW6F,YAAY,CACrC9B,eAAgB/D,EAAWmL,UAAU,CACrCpI,WAAY/C,EAAW+C,UAAU,CACjCrgB,qBAAsBsd,EAAWtd,oBAAoB,CAErDyf,YAAanC,EAAWmC,WAAW,CAEnCiJ,WAAY,CAAC,EAEbrU,kBAAAA,EACAoQ,kBAAAA,EACApW,QAAAA,EACAsa,sBAAuBrL,AAAAA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAYqL,qBAAqB,AAAD,GAAK,CAAC,EAC7DC,YAAatL,AAAAA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAYsL,WAAW,AAAD,GAAK,GAExCC,aAAcC,AASlB,SAA4BxL,CAAgC,EAC1D,GAAM,CAAEta,UAAAA,CAAS,CAAEC,QAAAA,CAAO,CAAE8lB,iBAAAA,CAAgB,CAAE,CAAGzL,EACjD,OAAO,IAAIva,EAAa,CACtBC,UAAAA,EACAC,QAAAA,EACAC,YAAa6lB,CACf,EACF,EAhBqCzL,EACnC,EAKA,OAFAA,EAAWhc,KAAK,CAAGA,EAEZA,CACT,EN+hBsCmlB,GAK5BxV,EAAoB,MAAM,IAAI,CAAC2K,kBAAkB,CAACxwB,GAAG,CACzD6xB,EACA,IACE,IAAI,CAACnZ,oBAAoB,CAAC1Y,GAAG,CAACuS,EAAc,IAC1C,IAAI,CAACX,gBAAgB,CAAC5R,GAAG,CAAC2R,EAAW,UAGnC,GAAI,IAAI,CAACyf,mBAAmB,EACtBzf,EAAU0X,kBAAkB,CAAE,CAChC,IAAMjP,EAAM,qBAEX,CAFW,IAAIJ,GACd,yEADU,qB,MAAA,O,WAAA,EAEZ,EAGA,OAFArI,EAAUsK,uBAAuB,CAAG7B,EAAIrE,OAAO,CAC/CpE,EAAUuK,iBAAiB,CAAG9B,EAAIzT,KAAK,CACjCyT,CACR,CAKF,IAAI2X,EAAUpd,EAGd,OAAQ,IAAI,CAAC0c,OAAO,EAClB,IAAK,gBAEH1f,EAAU+J,YAAY,CAAG,GACzB,KAEF,KAAK,eAGH/J,EAAUgK,WAAW,CAAG,GAGxBoW,EAAU,IAAI9iB,MAAM0F,EAAKipB,IACzB,KACF,KAAK,QAGHjsB,EAAUiK,kBAAkB,CAAG,GAC3BjK,EAAU0X,kBAAkB,EAC9B0I,CAAAA,EAAU,IAAI9iB,MAAM0F,EAAKkpB,GAA4B,EACvD,KACF,SAEE9L,EAAU+L,AAuN1B,SAA0B/L,CAAoB,CAAEpgB,CAAoB,EAClE,IAAMosB,EAAkB,CACtBzvB,IACElT,CAAiC,CACjCmT,CAAqB,CACrBC,CAAa,EAEb,OAAQD,GACN,IAAK,SACL,IAAK,eACL,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,WACL,IAAK,SAGH,OADAyvB,GAAarsB,EADS+G,EAAAA,oBAAAA,CAAAA,QAA6B,GACZ,CAAC,QAAQ,EAAEnK,EAAK,CAAC,EACjDF,EAAe,GAAG,CAACjT,EAAQmT,EAAMC,EAE1C,KAAK,QACH,OACEpT,CAAM,CAAC6iC,GAAe,EACrB7iC,CAAAA,CAAM,CAAC6iC,GAAe,CAAG,IACxB,IAAIhvB,MAAM7T,EAAO2pB,KAAK,GAAIgZ,EAAe,CAE/C,SACE,OAAO1vB,EAAe,GAAG,CAACjT,EAAQmT,EAAMC,EAC5C,CACF,CACF,EAEM0vB,EAAsB,CAC1B5vB,IACElT,CAAyC,CACzCmT,CAAqB,EAErB,OAAQA,GACN,IAAK,UACH,OACEnT,CAAM,CAAC+iC,GAAc,EACpB/iC,CAAAA,CAAM,CAAC+iC,GAAc,CAAG,IAAIlvB,MAAM7T,EAAO6gC,OAAO,CAAE8B,EAAe,CAEtE,KAAK,UACL,IAAK,UACL,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,cACL,IAAK,WAMH,OAJAC,GAAarsB,EADS+G,EAAAA,oBAAAA,CAAAA,QAA6B,GACZ,CAAC,QAAQ,EAAEnK,EAAK,CAAC,EAIjDF,EAAe,GAAG,CAACjT,EAAQmT,EAAMnT,EAE1C,KAAK,QACH,OACEA,CAAM,CAACgjC,GAAmB,EACzBhjC,CAAAA,CAAM,CAACgjC,GAAmB,CAAG,IAC5B,IAAInvB,MAQF7T,EAAO2pB,KAAK,GACZmZ,EAAmB,CAG3B,SAIE,OAAO7vB,EAAe,GAAG,CAACjT,EAAQmT,EAAMnT,EAC5C,CACF,CAGF,EAEA,OAAO,IAAI6T,MAAM8iB,EAASmM,EAC5B,EA7S2CvpB,EAAKhD,EACpC,CAGA,IAAMkK,EAAQwiB,ASttBnB,SAAqCC,CAAoB,EAE9D,IAAIC,EAAS,QACRD,EAAalhB,QAAQ,CAACmhB,IACzBA,CAAAA,EAAS,SAAQ,EAEnB,GAAM,EAAG,GAAGC,EAAM,CAAGF,EAAa1kB,KAAK,CAAC2kB,GAKxC,MADiBE,AAHIF,CAAAA,CAAM,CAAC,EAAE,CAAGC,EAAM9uB,IAAI,CAAC6uB,EAAM,EAGpB3kB,KAAK,CAAC,KAAKE,KAAK,CAAC,EAAG,IAAIpK,IAAI,CAAC,IAE7D,ET0sBsD,IAAI,CAAC2gB,gBAAgB,EAEzDqO,EAASxX,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,IAKf,OAFAwX,EAAOC,oBAAoB,CAAC,aAAc9iB,GAEnC6iB,EAAOvX,KAAK,CACjB9S,EAAAA,UAAoC,CACpC,CACE+S,SAAU,CAAC,0BAA0B,EAAEvL,EAAM,CAAC,CAC9C3hB,WAAY,CACV,aAAc2hB,CAChB,CACF,EACA,SACE,IAAI,CAAC8V,EAAE,CACLC,EACAC,EACAlgB,EACAY,EACAuf,EACAC,EACAnxB,GAGR,KAMN,GAAI,CAAEilB,CAAAA,aAAoBlI,QAAO,EAE/B,OAAO,IAAIA,SAAS,KAAM,CAAEC,OAAQ,GAAI,GAG1C,GAAIiI,EAASnoB,OAAO,CAACiR,GAAG,CAAC,wBACvB,MAAM,qBAEL,CAFK,AAAInP,MACR,sIADI,qB,MAAA,O,WAAA,EAEN,GAGF,GAAIqmB,AAA8C,MAA9CA,EAASnoB,OAAO,CAAC4Q,GAAG,CAAC,qBAEvB,MAAM,qBAEL,CAFK,AAAI9O,MACR,gLADI,qB,MAAA,O,WAAA,EAEN,GAGF,OAAOqmB,CACT,CACF,CAEA,OAAesK,GASR,SAASiB,GAAoBT,CAA0B,QAG1DA,EAAAA,EAASiO,IAAI,IACbjO,EAASkO,GAAG,IACZlO,EAASmO,MAAM,IACfnO,EAASoO,KAAK,IACdpO,EAASQ,OAAO,AAKpB,CAIA,IAAMgN,GAAgBpiC,OAAO,WACvBqiC,GAAqBriC,OAAO,SAC5BkiC,GAAiBliC,OAAO,SACxBijC,GAAqBjjC,OAAO,gBAC5BkjC,GAAaljC,OAAO,QACpBmjC,GAAiBnjC,OAAO,YACxBojC,GAAgBpjC,OAAO,WACvBqjC,GAAgBrjC,OAAO,WAqBvB6hC,GAA6B,CACjCtvB,IACElT,CAAyC,CACzCmT,CAAqB,CACrBC,CAAa,EAEb,OAAQD,GACN,IAAK,UACH,OACEnT,CAAM,CAAC+jC,GAAc,EACpB/jC,CAAAA,CAAM,CAAC+jC,GAAc,CAAGpwB,EAAe,IAAI,CAAC,IAAIC,QAAQ,CAAC,GAAE,CAEhE,KAAK,UACH,OACE5T,CAAM,CAACgkC,GAAc,EACpBhkC,CAAAA,CAAM,CAACgkC,GAAc,CAAG7uB,EAAsB,IAAI,CACjD,IAAIjV,EAAAA,cAAcA,CAAC,IAAI0T,QAAQ,CAAC,IAAG,CAGzC,KAAK,UACH,OACE5T,CAAM,CAAC+iC,GAAc,EACpB/iC,CAAAA,CAAM,CAAC+iC,GAAc,CAAG,IAAIlvB,MAC3B7T,EAAO6gC,OAAO,CACdoD,GAA0B,CAGhC,KAAK,MAIH,OAAO7wB,EAASytB,OAAO,CAACvX,IAAI,AAC9B,KAAK,MACL,IAAK,KACH,MACF,KAAK,QACH,OACEtpB,CAAM,CAACgjC,GAAmB,EACzBhjC,CAAAA,CAAM,CAACgjC,GAAmB,CAAG,IAC5B,IAAInvB,MAQF7T,EAAO2pB,KAAK,GACZ6Y,GAA0B,CAGlC,SACE,OAAOvvB,EAAe,GAAG,CAACjT,EAAQmT,EAAMC,EAC5C,CACF,CAGF,EAEM6wB,GAA6B,CACjC/wB,IACElT,CAAiC,CACjCmT,CAAqB,CACrBC,CAAa,EAEb,OAAQD,GAEN,IAAK,SACH,MAAO,EACT,KAAK,eACH,OACEnT,CAAM,CAAC4jC,GAAmB,EACzB5jC,CAAAA,CAAM,CAAC4jC,GAAmB,CAAG,IAAIM,eAAgB,CAEtD,KAAK,OACH,OACElkC,CAAM,CAAC6jC,GAAW,EACjB7jC,CAAAA,CAAM,CAAC6jC,GAAW,CAAGM,AU74BzB,SAAkBxhB,CAAiB,EACxC,IAAMvf,EAAI,IAAIyjB,IAAIlE,GAIlB,OAHAvf,EAAEglB,IAAI,CAAG,iBACThlB,EAAE8lB,MAAM,CAAG,GACX9lB,EAAEimB,QAAQ,CAAG,OACNjmB,CACT,EVu4ByCpD,EAAOspB,IAAI,EAAEA,IAAG,CAEnD,KAAK,SACL,IAAK,WACH,OACEtpB,CAAM,CAAC8jC,GAAe,EACrB9jC,CAAAA,CAAM,CAAC8jC,GAAe,CAAG,IAAM1wB,EAASkW,IAAG,CAIhD,KAAK,MAIH,MACF,KAAK,QACH,OACEtpB,CAAM,CAAC6iC,GAAe,EACrB7iC,CAAAA,CAAM,CAAC6iC,GAAe,CAAG,IACxB,IAAIhvB,MAAM7T,EAAO2pB,KAAK,GAAIsa,GAA0B,CAE1D,SACE,OAAOhxB,EAAe,GAAG,CAACjT,EAAQmT,EAAMC,EAC5C,CACF,CACF,EA0FMqvB,GAA+B,CACnCvvB,IACElT,CAAyC,CACzCmT,CAAqB,CACrBC,CAAa,EAEb,OAAQD,GACN,IAAK,UACH,OACEnT,CAAM,CAAC+iC,GAAc,EACpB/iC,CAAAA,CAAM,CAAC+iC,GAAc,CAAG,IAAIlvB,MAC3B7T,EAAO6gC,OAAO,CACduD,GAA4B,CAGlC,KAAK,UACL,IAAK,UACL,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,cACL,IAAK,WACH,MAAM,qBAEL,CAFK,IAAInlB,GACR,CAAC,MAAM,EAAEjf,EAAO6gC,OAAO,CAACziB,QAAQ,CAAC,sFAAsF,EAAEjL,EAAK,GAAG,CAAC,EAD9H,qB,MAAA,O,WAAA,EAEN,EACF,KAAK,QACH,OACEnT,CAAM,CAACgjC,GAAmB,EACzBhjC,CAAAA,CAAM,CAACgjC,GAAmB,CAAG,IAC5B,IAAInvB,MAQF7T,EAAO2pB,KAAK,GACZ8Y,GAA4B,CAGpC,SACE,OAAOxvB,EAAe,GAAG,CAACjT,EAAQmT,EAAMC,EAC5C,CACF,CAGF,EAEMgxB,GAA+B,CACnClxB,IACElT,CAAiC,CACjCmT,CAAqB,CACrBC,CAAa,EAEb,OAAQD,GACN,IAAK,SACL,IAAK,eACL,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,WACL,IAAK,SACH,MAAM,qBAEL,CAFK,IAAI8L,GACR,CAAC,MAAM,EAAEjf,EAAOoe,QAAQ,CAAC,sFAAsF,EAAEjL,EAAK,GAAG,CAAC,EADtH,qB,MAAA,O,WAAA,EAEN,EACF,KAAK,QACH,OACEnT,CAAM,CAAC6iC,GAAe,EACrB7iC,CAAAA,CAAM,CAAC6iC,GAAe,CAAG,IACxB,IAAIhvB,MAAM7T,EAAO2pB,KAAK,GAAIya,GAA4B,CAE5D,SACE,OAAOnxB,EAAe,GAAG,CAACjT,EAAQmT,EAAMC,EAC5C,CACF,CACF,EAEA,SAASmsB,GAAqB9e,CAAa,EACzC,OAAO,qBAEN,CAFM,IAAI7B,GACT,CAAC,MAAM,EAAE6B,EAAM,wIAAwI,CAAC,EADnJ,qB,MAAA,O,WAAA,EAEP,EACF,CAEO,SAASmiB,GACd9nB,CAAgB,CAChBuC,CAAwC,CACxC+B,CAAkB,EAElB,GAAI/B,EAAe,CACjB,GAAIA,AAAuB,UAAvBA,EAAclX,IAAI,CACpB,MAAM,qBAEL,CAFK,AAAI/B,MACR,CAAC,MAAM,EAAE0W,EAAM2F,KAAK,CAAC,OAAO,EAAErB,EAAW,gJAAgJ,EAAEA,EAAW,qKAAqK,CAAC,EADxW,qB,MAAA,O,WAAA,EAEN,GACK,GAAI/B,AAAuB,mBAAvBA,EAAclX,IAAI,CAC3B,MAAM,qBAEL,CAFK,AAAI/B,MACR,CAAC,MAAM,EAAE0W,EAAM2F,KAAK,CAAC,OAAO,EAAErB,EAAW,iLAAiL,EAAEA,EAAW,6KAA6K,CAAC,EADjZ,qB,MAAA,O,WAAA,EAEN,EAEJ,CAEA,GAAItE,EAAM0F,kBAAkB,CAC1B,MAAM,qBAEL,CAFK,IAAIvB,GACR,CAAC,MAAM,EAAEnE,EAAM2F,KAAK,CAAC,8EAA8E,EAAErB,EAAW,4HAA4H,CAAC,EADzO,qB,MAAA,O,WAAA,EAEN,GAGF,GAAI/B,GACF,GAAIA,AAAuB,cAAvBA,EAAclX,IAAI,CAAkB,CAEtC,IAAM6G,EAAQ,qBAEb,CAFa,AAAI5I,MAChB,CAAC,MAAM,EAAE0W,EAAM2F,KAAK,CAAC,MAAM,EAAErB,EAAW,+HAA+H,CAAC,EAD5J,qB,MAAA,O,WAAA,EAEd,GACA8B,GACEpG,EAAM2F,KAAK,CACXrB,EACApS,EACAqQ,EAEJ,MAAO,GAAIA,AAAuB,kBAAvBA,EAAclX,IAAI,CAE3Bua,GACE5F,EAAM2F,KAAK,CACXrB,EACA/B,EAAcsD,eAAe,OAE1B,GAAItD,AAAuB,qBAAvBA,EAAclX,IAAI,CAAyB,CAEpDkX,EAAcuD,UAAU,CAAG,EAE3B,IAAM5B,EAAM,qBAEX,CAFW,IAAIJ,GACd,CAAC,MAAM,EAAE9D,EAAM2F,KAAK,CAAC,mDAAmD,EAAErB,EAAW,6EAA6E,CAAC,EADzJ,qB,MAAA,O,WAAA,EAEZ,EAIA,OAHAtE,EAAM+F,uBAAuB,CAAGzB,EAChCtE,EAAMgG,iBAAiB,CAAG9B,EAAIzT,KAAK,CAE7ByT,CACR,MAEE3B,GACAA,AAAuB,YAAvBA,EAAclX,IAAI,EAElBkX,CAAAA,EAAc0D,WAAW,CAAG,EAAG,EAGrC,C"}
|
|
1
|
+
{"version":3,"file":"app-route.runtime.dev.js","sources":["webpack://next/./dist/compiled/@edge-runtime/cookies/index.js","webpack://next/./dist/compiled/cookie/index.js","webpack://next/./dist/compiled/p-queue/index.js","webpack://next/./dist/compiled/react/cjs/react.development.js","webpack://next/./dist/compiled/react/index.js","webpack://next/./dist/compiled/string-hash/index.js","webpack://next/./dist/src/lib/picocolors.ts","webpack://next/./dist/src/server/route-modules/route-module.ts","webpack://next/./dist/src/client/components/app-router-headers.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/reflect.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/headers.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/request-cookies.ts","webpack://next/./dist/src/lib/constants.ts","webpack://next/./dist/src/server/lib/trace/constants.ts","webpack://next/./dist/src/server/api-utils/index.ts","webpack://next/./dist/src/server/async-storage/draft-mode-provider.ts","webpack://next/./dist/src/server/async-storage/request-store.ts","webpack://next/./dist/src/server/web/utils.ts","webpack://next/./dist/src/shared/lib/invariant-error.ts","webpack://next/./dist/src/server/after/revalidation-utils.ts","webpack://next/./dist/src/server/app-render/async-local-storage.ts","webpack://next/./dist/src/server/after/after-context.ts","webpack://next/./dist/src/shared/lib/is-thenable.ts","webpack://next/./dist/src/shared/lib/segment.ts","webpack://next/./dist/src/server/web/http.ts","webpack://next/./dist/src/server/lib/implicit-tags.ts","webpack://next/./dist/src/client/components/hooks-server-context.ts","webpack://next/./dist/src/client/components/static-generation-bailout.ts","webpack://next/./dist/src/server/dynamic-rendering-utils.ts","webpack://next/./dist/src/lib/scheduler.ts","webpack://next/./dist/src/server/app-render/dynamic-rendering.ts","webpack://next/./dist/src/server/lib/clone-response.ts","webpack://next/./dist/src/server/response-cache/types.ts","webpack://next/./dist/src/lib/detached-promise.ts","webpack://next/./dist/src/server/stream-utils/encodedTags.ts","webpack://next/./dist/src/server/stream-utils/uint8array-helpers.ts","webpack://next/./dist/src/server/stream-utils/node-web-streams-helper.ts","webpack://next/./dist/src/server/request-meta.ts","webpack://next/./dist/src/shared/lib/router/utils/remove-trailing-slash.ts","webpack://next/./dist/src/shared/lib/router/utils/parse-path.ts","webpack://next/./dist/src/shared/lib/router/utils/add-path-prefix.ts","webpack://next/./dist/src/shared/lib/router/utils/add-path-suffix.ts","webpack://next/./dist/src/shared/lib/router/utils/path-has-prefix.ts","webpack://next/./dist/src/shared/lib/i18n/normalize-locale-path.ts","webpack://next/./dist/src/server/web/next-url.ts","webpack://next/./dist/src/shared/lib/router/utils/get-next-pathname-info.ts","webpack://next/./dist/src/shared/lib/router/utils/remove-path-prefix.ts","webpack://next/./dist/src/shared/lib/get-hostname.ts","webpack://next/./dist/src/shared/lib/i18n/detect-domain-locale.ts","webpack://next/./dist/src/shared/lib/router/utils/format-next-pathname-info.ts","webpack://next/./dist/src/shared/lib/router/utils/add-locale.ts","webpack://next/./dist/src/server/web/spec-extension/request.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/next-request.ts","webpack://next/./dist/src/server/client-component-renderer-logger.ts","webpack://next/./dist/src/server/pipe-readable.ts","webpack://next/./dist/src/server/render-result.ts","webpack://next/./dist/src/server/lib/patch-fetch.ts","webpack://next/./dist/src/build/output/log.ts","webpack://next/./dist/src/server/lib/lru-cache.ts","webpack://next/./dist/src/server/route-modules/app-route/helpers/auto-implement-methods.ts","webpack://next/./dist/src/lib/format-server-error.ts","webpack://next/./dist/src/client/components/http-access-fallback/http-access-fallback.ts","webpack://next/./dist/src/client/components/redirect-status-code.ts","webpack://next/./dist/src/client/components/redirect-error.ts","webpack://next/./dist/src/server/app-render/prospective-render-utils.ts","webpack://next/./dist/src/server/app-render/create-error-handler.tsx","webpack://next/./dist/src/shared/lib/lazy-dynamic/bailout-to-csr.ts","webpack://next/./dist/src/client/components/is-next-router-error.ts","webpack://next/./dist/src/shared/lib/app-router-context.shared-runtime.ts","webpack://next/./dist/src/server/app-render/cache-signal.ts","webpack://next/./dist/src/server/request/utils.ts","webpack://next/./dist/src/server/create-deduped-by-callsite-server-error-logger.ts","webpack://next/./dist/src/server/request/params.ts","webpack://next/./dist/src/server/route-modules/app-route/module.ts","webpack://next/./dist/src/server/route-modules/app-route/helpers/is-static-gen-enabled.ts","webpack://next/./dist/src/server/lib/dedupe-fetch.ts","webpack://next/./dist/src/server/route-modules/app-route/helpers/parsed-url-query-to-params.ts","webpack://next/./dist/src/client/components/redirect.ts","webpack://next/./dist/src/server/lib/server-action-request-meta.ts","webpack://next/./dist/src/server/async-storage/work-store.ts","webpack://next/./dist/src/shared/lib/page-path/ensure-leading-slash.ts","webpack://next/./dist/src/shared/lib/router/utils/app-paths.ts","webpack://next/./dist/src/server/route-modules/app-route/helpers/get-pathname-from-absolute-path.ts","webpack://next/./dist/src/server/route-modules/app-route/helpers/clean-url.ts"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar src_exports = {};\n__export(src_exports, {\n RequestCookies: () => RequestCookies,\n ResponseCookies: () => ResponseCookies,\n parseCookie: () => parseCookie,\n parseSetCookie: () => parseSetCookie,\n stringifyCookie: () => stringifyCookie\n});\nmodule.exports = __toCommonJS(src_exports);\n\n// src/serialize.ts\nfunction stringifyCookie(c) {\n var _a;\n const attrs = [\n \"path\" in c && c.path && `Path=${c.path}`,\n \"expires\" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === \"number\" ? new Date(c.expires) : c.expires).toUTCString()}`,\n \"maxAge\" in c && typeof c.maxAge === \"number\" && `Max-Age=${c.maxAge}`,\n \"domain\" in c && c.domain && `Domain=${c.domain}`,\n \"secure\" in c && c.secure && \"Secure\",\n \"httpOnly\" in c && c.httpOnly && \"HttpOnly\",\n \"sameSite\" in c && c.sameSite && `SameSite=${c.sameSite}`,\n \"partitioned\" in c && c.partitioned && \"Partitioned\",\n \"priority\" in c && c.priority && `Priority=${c.priority}`\n ].filter(Boolean);\n const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : \"\")}`;\n return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join(\"; \")}`;\n}\nfunction parseCookie(cookie) {\n const map = /* @__PURE__ */ new Map();\n for (const pair of cookie.split(/; */)) {\n if (!pair)\n continue;\n const splitAt = pair.indexOf(\"=\");\n if (splitAt === -1) {\n map.set(pair, \"true\");\n continue;\n }\n const [key, value] = [pair.slice(0, splitAt), pair.slice(splitAt + 1)];\n try {\n map.set(key, decodeURIComponent(value != null ? value : \"true\"));\n } catch {\n }\n }\n return map;\n}\nfunction parseSetCookie(setCookie) {\n if (!setCookie) {\n return void 0;\n }\n const [[name, value], ...attributes] = parseCookie(setCookie);\n const {\n domain,\n expires,\n httponly,\n maxage,\n path,\n samesite,\n secure,\n partitioned,\n priority\n } = Object.fromEntries(\n attributes.map(([key, value2]) => [\n key.toLowerCase().replace(/-/g, \"\"),\n value2\n ])\n );\n const cookie = {\n name,\n value: decodeURIComponent(value),\n domain,\n ...expires && { expires: new Date(expires) },\n ...httponly && { httpOnly: true },\n ...typeof maxage === \"string\" && { maxAge: Number(maxage) },\n path,\n ...samesite && { sameSite: parseSameSite(samesite) },\n ...secure && { secure: true },\n ...priority && { priority: parsePriority(priority) },\n ...partitioned && { partitioned: true }\n };\n return compact(cookie);\n}\nfunction compact(t) {\n const newT = {};\n for (const key in t) {\n if (t[key]) {\n newT[key] = t[key];\n }\n }\n return newT;\n}\nvar SAME_SITE = [\"strict\", \"lax\", \"none\"];\nfunction parseSameSite(string) {\n string = string.toLowerCase();\n return SAME_SITE.includes(string) ? string : void 0;\n}\nvar PRIORITY = [\"low\", \"medium\", \"high\"];\nfunction parsePriority(string) {\n string = string.toLowerCase();\n return PRIORITY.includes(string) ? string : void 0;\n}\nfunction splitCookiesString(cookiesString) {\n if (!cookiesString)\n return [];\n var cookiesStrings = [];\n var pos = 0;\n var start;\n var ch;\n var lastComma;\n var nextStart;\n var cookiesSeparatorFound;\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1;\n }\n return pos < cookiesString.length;\n }\n function notSpecialChar() {\n ch = cookiesString.charAt(pos);\n return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n }\n while (pos < cookiesString.length) {\n start = pos;\n cookiesSeparatorFound = false;\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos);\n if (ch === \",\") {\n lastComma = pos;\n pos += 1;\n skipWhitespace();\n nextStart = pos;\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1;\n }\n if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n cookiesSeparatorFound = true;\n pos = nextStart;\n cookiesStrings.push(cookiesString.substring(start, lastComma));\n start = pos;\n } else {\n pos = lastComma + 1;\n }\n } else {\n pos += 1;\n }\n }\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length));\n }\n }\n return cookiesStrings;\n}\n\n// src/request-cookies.ts\nvar RequestCookies = class {\n constructor(requestHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n this._headers = requestHeaders;\n const header = requestHeaders.get(\"cookie\");\n if (header) {\n const parsed = parseCookie(header);\n for (const [name, value] of parsed) {\n this._parsed.set(name, { name, value });\n }\n }\n }\n [Symbol.iterator]() {\n return this._parsed[Symbol.iterator]();\n }\n /**\n * The amount of cookies received from the client\n */\n get size() {\n return this._parsed.size;\n }\n get(...args) {\n const name = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(name);\n }\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed);\n if (!args.length) {\n return all.map(([_, value]) => value);\n }\n const name = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter(([n]) => n === name).map(([_, value]) => value);\n }\n has(name) {\n return this._parsed.has(name);\n }\n set(...args) {\n const [name, value] = args.length === 1 ? [args[0].name, args[0].value] : args;\n const map = this._parsed;\n map.set(name, { name, value });\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value2]) => stringifyCookie(value2)).join(\"; \")\n );\n return this;\n }\n /**\n * Delete the cookies matching the passed name or names in the request.\n */\n delete(names) {\n const map = this._parsed;\n const result = !Array.isArray(names) ? map.delete(names) : names.map((name) => map.delete(name));\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value]) => stringifyCookie(value)).join(\"; \")\n );\n return result;\n }\n /**\n * Delete all the cookies in the cookies in the request.\n */\n clear() {\n this.delete(Array.from(this._parsed.keys()));\n return this;\n }\n /**\n * Format the cookies in the request as a string for logging\n */\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map((v) => `${v.name}=${encodeURIComponent(v.value)}`).join(\"; \");\n }\n};\n\n// src/response-cookies.ts\nvar ResponseCookies = class {\n constructor(responseHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n var _a, _b, _c;\n this._headers = responseHeaders;\n const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get(\"set-cookie\")) != null ? _c : [];\n const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie);\n for (const cookieString of cookieStrings) {\n const parsed = parseSetCookie(cookieString);\n if (parsed)\n this._parsed.set(parsed.name, parsed);\n }\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise.\n */\n get(...args) {\n const key = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(key);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise.\n */\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed.values());\n if (!args.length) {\n return all;\n }\n const key = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter((c) => c.name === key);\n }\n has(name) {\n return this._parsed.has(name);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise.\n */\n set(...args) {\n const [name, value, cookie] = args.length === 1 ? [args[0].name, args[0].value, args[0]] : args;\n const map = this._parsed;\n map.set(name, normalizeCookie({ name, value, ...cookie }));\n replace(map, this._headers);\n return this;\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise.\n */\n delete(...args) {\n const [name, options] = typeof args[0] === \"string\" ? [args[0]] : [args[0].name, args[0]];\n return this.set({ ...options, name, value: \"\", expires: /* @__PURE__ */ new Date(0) });\n }\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map(stringifyCookie).join(\"; \");\n }\n};\nfunction replace(bag, headers) {\n headers.delete(\"set-cookie\");\n for (const [, value] of bag) {\n const serialized = stringifyCookie(value);\n headers.append(\"set-cookie\", serialized);\n }\n}\nfunction normalizeCookie(cookie = { name: \"\", value: \"\" }) {\n if (typeof cookie.expires === \"number\") {\n cookie.expires = new Date(cookie.expires);\n }\n if (cookie.maxAge) {\n cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3);\n }\n if (cookie.path === null || cookie.path === void 0) {\n cookie.path = \"/\";\n }\n return cookie;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n RequestCookies,\n ResponseCookies,\n parseCookie,\n parseSetCookie,\n stringifyCookie\n});\n","(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */r.parse=parse;r.serialize=serialize;var i=decodeURIComponent;var t=encodeURIComponent;var a=/; */;var n=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function parse(e,r){if(typeof e!==\"string\"){throw new TypeError(\"argument str must be a string\")}var t={};var n=r||{};var o=e.split(a);var s=n.decode||i;for(var p=0;p<o.length;p++){var f=o[p];var u=f.indexOf(\"=\");if(u<0){continue}var v=f.substr(0,u).trim();var c=f.substr(++u,f.length).trim();if('\"'==c[0]){c=c.slice(1,-1)}if(undefined==t[v]){t[v]=tryDecode(c,s)}}return t}function serialize(e,r,i){var a=i||{};var o=a.encode||t;if(typeof o!==\"function\"){throw new TypeError(\"option encode is invalid\")}if(!n.test(e)){throw new TypeError(\"argument name is invalid\")}var s=o(r);if(s&&!n.test(s)){throw new TypeError(\"argument val is invalid\")}var p=e+\"=\"+s;if(null!=a.maxAge){var f=a.maxAge-0;if(isNaN(f)||!isFinite(f)){throw new TypeError(\"option maxAge is invalid\")}p+=\"; Max-Age=\"+Math.floor(f)}if(a.domain){if(!n.test(a.domain)){throw new TypeError(\"option domain is invalid\")}p+=\"; Domain=\"+a.domain}if(a.path){if(!n.test(a.path)){throw new TypeError(\"option path is invalid\")}p+=\"; Path=\"+a.path}if(a.expires){if(typeof a.expires.toUTCString!==\"function\"){throw new TypeError(\"option expires is invalid\")}p+=\"; Expires=\"+a.expires.toUTCString()}if(a.httpOnly){p+=\"; HttpOnly\"}if(a.secure){p+=\"; Secure\"}if(a.sameSite){var u=typeof a.sameSite===\"string\"?a.sameSite.toLowerCase():a.sameSite;switch(u){case true:p+=\"; SameSite=Strict\";break;case\"lax\":p+=\"; SameSite=Lax\";break;case\"strict\":p+=\"; SameSite=Strict\";break;case\"none\":p+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}}return p}function tryDecode(e,r){try{return r(e)}catch(r){return e}}})();module.exports=e})();","(()=>{\"use strict\";var e={993:e=>{var t=Object.prototype.hasOwnProperty,n=\"~\";function Events(){}if(Object.create){Events.prototype=Object.create(null);if(!(new Events).__proto__)n=false}function EE(e,t,n){this.fn=e;this.context=t;this.once=n||false}function addListener(e,t,r,i,s){if(typeof r!==\"function\"){throw new TypeError(\"The listener must be a function\")}var o=new EE(r,i||e,s),u=n?n+t:t;if(!e._events[u])e._events[u]=o,e._eventsCount++;else if(!e._events[u].fn)e._events[u].push(o);else e._events[u]=[e._events[u],o];return e}function clearEvent(e,t){if(--e._eventsCount===0)e._events=new Events;else delete e._events[t]}function EventEmitter(){this._events=new Events;this._eventsCount=0}EventEmitter.prototype.eventNames=function eventNames(){var e=[],r,i;if(this._eventsCount===0)return e;for(i in r=this._events){if(t.call(r,i))e.push(n?i.slice(1):i)}if(Object.getOwnPropertySymbols){return e.concat(Object.getOwnPropertySymbols(r))}return e};EventEmitter.prototype.listeners=function listeners(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,s=r.length,o=new Array(s);i<s;i++){o[i]=r[i].fn}return o};EventEmitter.prototype.listenerCount=function listenerCount(e){var t=n?n+e:e,r=this._events[t];if(!r)return 0;if(r.fn)return 1;return r.length};EventEmitter.prototype.emit=function emit(e,t,r,i,s,o){var u=n?n+e:e;if(!this._events[u])return false;var a=this._events[u],l=arguments.length,c,h;if(a.fn){if(a.once)this.removeListener(e,a.fn,undefined,true);switch(l){case 1:return a.fn.call(a.context),true;case 2:return a.fn.call(a.context,t),true;case 3:return a.fn.call(a.context,t,r),true;case 4:return a.fn.call(a.context,t,r,i),true;case 5:return a.fn.call(a.context,t,r,i,s),true;case 6:return a.fn.call(a.context,t,r,i,s,o),true}for(h=1,c=new Array(l-1);h<l;h++){c[h-1]=arguments[h]}a.fn.apply(a.context,c)}else{var _=a.length,f;for(h=0;h<_;h++){if(a[h].once)this.removeListener(e,a[h].fn,undefined,true);switch(l){case 1:a[h].fn.call(a[h].context);break;case 2:a[h].fn.call(a[h].context,t);break;case 3:a[h].fn.call(a[h].context,t,r);break;case 4:a[h].fn.call(a[h].context,t,r,i);break;default:if(!c)for(f=1,c=new Array(l-1);f<l;f++){c[f-1]=arguments[f]}a[h].fn.apply(a[h].context,c)}}}return true};EventEmitter.prototype.on=function on(e,t,n){return addListener(this,e,t,n,false)};EventEmitter.prototype.once=function once(e,t,n){return addListener(this,e,t,n,true)};EventEmitter.prototype.removeListener=function removeListener(e,t,r,i){var s=n?n+e:e;if(!this._events[s])return this;if(!t){clearEvent(this,s);return this}var o=this._events[s];if(o.fn){if(o.fn===t&&(!i||o.once)&&(!r||o.context===r)){clearEvent(this,s)}}else{for(var u=0,a=[],l=o.length;u<l;u++){if(o[u].fn!==t||i&&!o[u].once||r&&o[u].context!==r){a.push(o[u])}}if(a.length)this._events[s]=a.length===1?a[0]:a;else clearEvent(this,s)}return this};EventEmitter.prototype.removeAllListeners=function removeAllListeners(e){var t;if(e){t=n?n+e:e;if(this._events[t])clearEvent(this,t)}else{this._events=new Events;this._eventsCount=0}return this};EventEmitter.prototype.off=EventEmitter.prototype.removeListener;EventEmitter.prototype.addListener=EventEmitter.prototype.on;EventEmitter.prefixed=n;EventEmitter.EventEmitter=EventEmitter;if(true){e.exports=EventEmitter}},213:e=>{e.exports=(e,t)=>{t=t||(()=>{});return e.then((e=>new Promise((e=>{e(t())})).then((()=>e))),(e=>new Promise((e=>{e(t())})).then((()=>{throw e}))))}},574:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});function lowerBound(e,t,n){let r=0;let i=e.length;while(i>0){const s=i/2|0;let o=r+s;if(n(e[o],t)<=0){r=++o;i-=s+1}else{i=s}}return r}t[\"default\"]=lowerBound},821:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:true});const r=n(574);class PriorityQueue{constructor(){this._queue=[]}enqueue(e,t){t=Object.assign({priority:0},t);const n={priority:t.priority,run:e};if(this.size&&this._queue[this.size-1].priority>=t.priority){this._queue.push(n);return}const i=r.default(this._queue,n,((e,t)=>t.priority-e.priority));this._queue.splice(i,0,n)}dequeue(){const e=this._queue.shift();return e===null||e===void 0?void 0:e.run}filter(e){return this._queue.filter((t=>t.priority===e.priority)).map((e=>e.run))}get size(){return this._queue.length}}t[\"default\"]=PriorityQueue},816:(e,t,n)=>{const r=n(213);class TimeoutError extends Error{constructor(e){super(e);this.name=\"TimeoutError\"}}const pTimeout=(e,t,n)=>new Promise(((i,s)=>{if(typeof t!==\"number\"||t<0){throw new TypeError(\"Expected `milliseconds` to be a positive number\")}if(t===Infinity){i(e);return}const o=setTimeout((()=>{if(typeof n===\"function\"){try{i(n())}catch(e){s(e)}return}const r=typeof n===\"string\"?n:`Promise timed out after ${t} milliseconds`;const o=n instanceof Error?n:new TimeoutError(r);if(typeof e.cancel===\"function\"){e.cancel()}s(o)}),t);r(e.then(i,s),(()=>{clearTimeout(o)}))}));e.exports=pTimeout;e.exports[\"default\"]=pTimeout;e.exports.TimeoutError=TimeoutError}};var t={};function __nccwpck_require__(n){var r=t[n];if(r!==undefined){return r.exports}var i=t[n]={exports:{}};var s=true;try{e[n](i,i.exports,__nccwpck_require__);s=false}finally{if(s)delete t[n]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var n={};(()=>{var e=n;Object.defineProperty(e,\"__esModule\",{value:true});const t=__nccwpck_require__(993);const r=__nccwpck_require__(816);const i=__nccwpck_require__(821);const empty=()=>{};const s=new r.TimeoutError;class PQueue extends t{constructor(e){var t,n,r,s;super();this._intervalCount=0;this._intervalEnd=0;this._pendingCount=0;this._resolveEmpty=empty;this._resolveIdle=empty;e=Object.assign({carryoverConcurrencyCount:false,intervalCap:Infinity,interval:0,concurrency:Infinity,autoStart:true,queueClass:i.default},e);if(!(typeof e.intervalCap===\"number\"&&e.intervalCap>=1)){throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${(n=(t=e.intervalCap)===null||t===void 0?void 0:t.toString())!==null&&n!==void 0?n:\"\"}\\` (${typeof e.intervalCap})`)}if(e.interval===undefined||!(Number.isFinite(e.interval)&&e.interval>=0)){throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${(s=(r=e.interval)===null||r===void 0?void 0:r.toString())!==null&&s!==void 0?s:\"\"}\\` (${typeof e.interval})`)}this._carryoverConcurrencyCount=e.carryoverConcurrencyCount;this._isIntervalIgnored=e.intervalCap===Infinity||e.interval===0;this._intervalCap=e.intervalCap;this._interval=e.interval;this._queue=new e.queueClass;this._queueClass=e.queueClass;this.concurrency=e.concurrency;this._timeout=e.timeout;this._throwOnTimeout=e.throwOnTimeout===true;this._isPaused=e.autoStart===false}get _doesIntervalAllowAnother(){return this._isIntervalIgnored||this._intervalCount<this._intervalCap}get _doesConcurrentAllowAnother(){return this._pendingCount<this._concurrency}_next(){this._pendingCount--;this._tryToStartAnother();this.emit(\"next\")}_resolvePromises(){this._resolveEmpty();this._resolveEmpty=empty;if(this._pendingCount===0){this._resolveIdle();this._resolveIdle=empty;this.emit(\"idle\")}}_onResumeInterval(){this._onInterval();this._initializeIntervalIfNeeded();this._timeoutId=undefined}_isIntervalPaused(){const e=Date.now();if(this._intervalId===undefined){const t=this._intervalEnd-e;if(t<0){this._intervalCount=this._carryoverConcurrencyCount?this._pendingCount:0}else{if(this._timeoutId===undefined){this._timeoutId=setTimeout((()=>{this._onResumeInterval()}),t)}return true}}return false}_tryToStartAnother(){if(this._queue.size===0){if(this._intervalId){clearInterval(this._intervalId)}this._intervalId=undefined;this._resolvePromises();return false}if(!this._isPaused){const e=!this._isIntervalPaused();if(this._doesIntervalAllowAnother&&this._doesConcurrentAllowAnother){const t=this._queue.dequeue();if(!t){return false}this.emit(\"active\");t();if(e){this._initializeIntervalIfNeeded()}return true}}return false}_initializeIntervalIfNeeded(){if(this._isIntervalIgnored||this._intervalId!==undefined){return}this._intervalId=setInterval((()=>{this._onInterval()}),this._interval);this._intervalEnd=Date.now()+this._interval}_onInterval(){if(this._intervalCount===0&&this._pendingCount===0&&this._intervalId){clearInterval(this._intervalId);this._intervalId=undefined}this._intervalCount=this._carryoverConcurrencyCount?this._pendingCount:0;this._processQueue()}_processQueue(){while(this._tryToStartAnother()){}}get concurrency(){return this._concurrency}set concurrency(e){if(!(typeof e===\"number\"&&e>=1)){throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${e}\\` (${typeof e})`)}this._concurrency=e;this._processQueue()}async add(e,t={}){return new Promise(((n,i)=>{const run=async()=>{this._pendingCount++;this._intervalCount++;try{const o=this._timeout===undefined&&t.timeout===undefined?e():r.default(Promise.resolve(e()),t.timeout===undefined?this._timeout:t.timeout,(()=>{if(t.throwOnTimeout===undefined?this._throwOnTimeout:t.throwOnTimeout){i(s)}return undefined}));n(await o)}catch(e){i(e)}this._next()};this._queue.enqueue(run,t);this._tryToStartAnother();this.emit(\"add\")}))}async addAll(e,t){return Promise.all(e.map((async e=>this.add(e,t))))}start(){if(!this._isPaused){return this}this._isPaused=false;this._processQueue();return this}pause(){this._isPaused=true}clear(){this._queue=new this._queueClass}async onEmpty(){if(this._queue.size===0){return}return new Promise((e=>{const t=this._resolveEmpty;this._resolveEmpty=()=>{t();e()}}))}async onIdle(){if(this._pendingCount===0&&this._queue.size===0){return}return new Promise((e=>{const t=this._resolveIdle;this._resolveIdle=()=>{t();e()}}))}get size(){return this._queue.size}sizeBy(e){return this._queue.filter(e).length}get pending(){return this._pendingCount}get isPaused(){return this._isPaused}get timeout(){return this._timeout}set timeout(e){this._timeout=e}}e[\"default\"]=PQueue})();module.exports=n})();","/**\n * @license React\n * react.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function defineDeprecationWarning(methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n console.warn(\n \"%s(...) is deprecated in plain JavaScript React classes. %s\",\n info[0],\n info[1]\n );\n }\n });\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function warnNoop(publicInstance, callerName) {\n publicInstance =\n ((publicInstance = publicInstance.constructor) &&\n (publicInstance.displayName || publicInstance.name)) ||\n \"ReactClass\";\n var warningKey = publicInstance + \".\" + callerName;\n didWarnStateUpdateForUnmountedComponent[warningKey] ||\n (console.error(\n \"Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.\",\n callerName,\n publicInstance\n ),\n (didWarnStateUpdateForUnmountedComponent[warningKey] = !0));\n }\n function Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function ComponentDummy() {}\n function PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE$2\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function isValidElementType(type) {\n return \"string\" === typeof type ||\n \"function\" === typeof type ||\n type === REACT_FRAGMENT_TYPE ||\n type === REACT_PROFILER_TYPE ||\n type === REACT_STRICT_MODE_TYPE ||\n type === REACT_SUSPENSE_TYPE ||\n type === REACT_SUSPENSE_LIST_TYPE ||\n type === REACT_OFFSCREEN_TYPE ||\n (\"object\" === typeof type &&\n null !== type &&\n (type.$$typeof === REACT_LAZY_TYPE ||\n type.$$typeof === REACT_MEMO_TYPE ||\n type.$$typeof === REACT_CONTEXT_TYPE ||\n type.$$typeof === REACT_CONSUMER_TYPE ||\n type.$$typeof === REACT_FORWARD_REF_TYPE ||\n type.$$typeof === REACT_CLIENT_REFERENCE$1 ||\n void 0 !== type.getModuleId))\n ? !0\n : !1;\n }\n function disabledLog() {}\n function disableLogs() {\n if (0 === disabledDepth) {\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd;\n var props = {\n configurable: !0,\n enumerable: !0,\n value: disabledLog,\n writable: !0\n };\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n }\n disabledDepth++;\n }\n function reenableLogs() {\n disabledDepth--;\n if (0 === disabledDepth) {\n var props = { configurable: !0, enumerable: !0, writable: !0 };\n Object.defineProperties(console, {\n log: assign({}, props, { value: prevLog }),\n info: assign({}, props, { value: prevInfo }),\n warn: assign({}, props, { value: prevWarn }),\n error: assign({}, props, { value: prevError }),\n group: assign({}, props, { value: prevGroup }),\n groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),\n groupEnd: assign({}, props, { value: prevGroupEnd })\n });\n }\n 0 > disabledDepth &&\n console.error(\n \"disabledDepth fell below zero. This is a bug in React. Please file an issue.\"\n );\n }\n function describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" (<anonymous>)\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n }\n function describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n var frame = componentFrameCache.get(fn);\n if (void 0 !== frame) return frame;\n reentry = !0;\n frame = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n var previousDispatcher = null;\n previousDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = null;\n disableLogs();\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$0) {\n control = x$0;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$1) {\n control = x$1;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter =\n RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n _RunInRootFrame$Deter = namePropDescriptor = 0;\n namePropDescriptor < sampleLines.length &&\n !sampleLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n for (\n ;\n _RunInRootFrame$Deter < controlLines.length &&\n !controlLines[_RunInRootFrame$Deter].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n _RunInRootFrame$Deter++;\n if (\n namePropDescriptor === sampleLines.length ||\n _RunInRootFrame$Deter === controlLines.length\n )\n for (\n namePropDescriptor = sampleLines.length - 1,\n _RunInRootFrame$Deter = controlLines.length - 1;\n 1 <= namePropDescriptor &&\n 0 <= _RunInRootFrame$Deter &&\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter];\n\n )\n _RunInRootFrame$Deter--;\n for (\n ;\n 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;\n namePropDescriptor--, _RunInRootFrame$Deter--\n )\n if (\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter]\n ) {\n if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {\n do\n if (\n (namePropDescriptor--,\n _RunInRootFrame$Deter--,\n 0 > _RunInRootFrame$Deter ||\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter])\n ) {\n var _frame =\n \"\\n\" +\n sampleLines[namePropDescriptor].replace(\n \" at new \",\n \" at \"\n );\n fn.displayName &&\n _frame.includes(\"<anonymous>\") &&\n (_frame = _frame.replace(\"<anonymous>\", fn.displayName));\n \"function\" === typeof fn &&\n componentFrameCache.set(fn, _frame);\n return _frame;\n }\n while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);\n }\n break;\n }\n }\n } finally {\n (reentry = !1),\n (ReactSharedInternals.H = previousDispatcher),\n reenableLogs(),\n (Error.prepareStackTrace = frame);\n }\n sampleLines = (sampleLines = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(sampleLines)\n : \"\";\n \"function\" === typeof fn && componentFrameCache.set(fn, sampleLines);\n return sampleLines;\n }\n function describeUnknownElementTypeFrameInDEV(type) {\n if (null == type) return \"\";\n if (\"function\" === typeof type) {\n var prototype = type.prototype;\n return describeNativeComponentFrame(\n type,\n !(!prototype || !prototype.isReactComponent)\n );\n }\n if (\"string\" === typeof type) return describeBuiltInComponentFrame(type);\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame(\"Suspense\");\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeNativeComponentFrame(type.render, !1);\n case REACT_MEMO_TYPE:\n return describeUnknownElementTypeFrameInDEV(type.type);\n case REACT_LAZY_TYPE:\n prototype = type._payload;\n type = type._init;\n try {\n return describeUnknownElementTypeFrameInDEV(type(prototype));\n } catch (x) {}\n }\n return \"\";\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, self, source, owner, props) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function cloneAndReplaceKey(oldElement, newKey) {\n newKey = ReactElement(\n oldElement.type,\n newKey,\n void 0,\n void 0,\n oldElement._owner,\n oldElement.props\n );\n newKey._store.validated = oldElement._store.validated;\n return newKey;\n }\n function validateChildKeys(node, parentType) {\n if (\n \"object\" === typeof node &&\n node &&\n node.$$typeof !== REACT_CLIENT_REFERENCE\n )\n if (isArrayImpl(node))\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n isValidElement(child) && validateExplicitKey(child, parentType);\n }\n else if (isValidElement(node))\n node._store && (node._store.validated = 1);\n else if (\n ((i = getIteratorFn(node)),\n \"function\" === typeof i &&\n i !== node.entries &&\n ((i = i.call(node)), i !== node))\n )\n for (; !(node = i.next()).done; )\n isValidElement(node.value) &&\n validateExplicitKey(node.value, parentType);\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n function validateExplicitKey(element, parentType) {\n if (\n element._store &&\n !element._store.validated &&\n null == element.key &&\n ((element._store.validated = 1),\n (parentType = getCurrentComponentErrorInfo(parentType)),\n !ownerHasKeyUseWarning[parentType])\n ) {\n ownerHasKeyUseWarning[parentType] = !0;\n var childOwner = \"\";\n element &&\n null != element._owner &&\n element._owner !== getOwner() &&\n ((childOwner = null),\n \"number\" === typeof element._owner.tag\n ? (childOwner = getComponentNameFromType(element._owner.type))\n : \"string\" === typeof element._owner.name &&\n (childOwner = element._owner.name),\n (childOwner = \" It was passed a child from \" + childOwner + \".\"));\n var prevGetCurrentStack = ReactSharedInternals.getCurrentStack;\n ReactSharedInternals.getCurrentStack = function () {\n var stack = describeUnknownElementTypeFrameInDEV(element.type);\n prevGetCurrentStack && (stack += prevGetCurrentStack() || \"\");\n return stack;\n };\n console.error(\n 'Each child in a list should have a unique \"key\" prop.%s%s See https://react.dev/link/warning-keys for more information.',\n parentType,\n childOwner\n );\n ReactSharedInternals.getCurrentStack = prevGetCurrentStack;\n }\n }\n function getCurrentComponentErrorInfo(parentType) {\n var info = \"\",\n owner = getOwner();\n owner &&\n (owner = getComponentNameFromType(owner.type)) &&\n (info = \"\\n\\nCheck the render method of `\" + owner + \"`.\");\n info ||\n ((parentType = getComponentNameFromType(parentType)) &&\n (info =\n \"\\n\\nCheck the top-level render call using <\" + parentType + \">.\"));\n return info;\n }\n function escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n }\n function getElementKey(element, index) {\n return \"object\" === typeof element &&\n null !== element &&\n null != element.key\n ? (checkKeyStringCoercion(element.key), escape(\"\" + element.key))\n : index.toString(36);\n }\n function noop$1() {}\n function resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop$1, noop$1)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"),\n (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n }\n function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback) {\n invokeCallback = children;\n callback = callback(invokeCallback);\n var childKey =\n \"\" === nameSoFar ? \".\" + getElementKey(invokeCallback, 0) : nameSoFar;\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != childKey &&\n (escapedPrefix =\n childKey.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (null != callback.key &&\n ((invokeCallback && invokeCallback.key === callback.key) ||\n checkKeyStringCoercion(callback.key)),\n (escapedPrefix = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (invokeCallback && invokeCallback.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n childKey\n )),\n \"\" !== nameSoFar &&\n null != invokeCallback &&\n isValidElement(invokeCallback) &&\n null == invokeCallback.key &&\n invokeCallback._store &&\n !invokeCallback._store.validated &&\n (escapedPrefix._store.validated = 2),\n (callback = escapedPrefix)),\n array.push(callback));\n return 1;\n }\n invokeCallback = 0;\n childKey = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = childKey + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n i === children.entries &&\n (didWarnAboutMaps ||\n console.warn(\n \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n ),\n (didWarnAboutMaps = !0)),\n children = i.call(children),\n i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = childKey + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n }\n function mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n }\n function lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status &&\n ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status)\n return (\n (ctor = payload._result),\n void 0 === ctor &&\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\\n\\nDid you accidentally put curly braces around the import?\",\n ctor\n ),\n \"default\" in ctor ||\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\",\n ctor\n ),\n ctor.default\n );\n throw payload._result;\n }\n function resolveDispatcher() {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher;\n }\n function noop() {}\n function enqueueTask(task) {\n if (null === enqueueTaskImpl)\n try {\n var requireString = (\"require\" + Math.random()).slice(0, 7);\n enqueueTaskImpl = (module && module[requireString]).call(\n module,\n \"timers\"\n ).setImmediate;\n } catch (_err) {\n enqueueTaskImpl = function (callback) {\n !1 === didWarnAboutMessageChannel &&\n ((didWarnAboutMessageChannel = !0),\n \"undefined\" === typeof MessageChannel &&\n console.error(\n \"This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning.\"\n ));\n var channel = new MessageChannel();\n channel.port1.onmessage = callback;\n channel.port2.postMessage(void 0);\n };\n }\n return enqueueTaskImpl(task);\n }\n function aggregateErrors(errors) {\n return 1 < errors.length && \"function\" === typeof AggregateError\n ? new AggregateError(errors)\n : errors[0];\n }\n function popActScope(prevActQueue, prevActScopeDepth) {\n prevActScopeDepth !== actScopeDepth - 1 &&\n console.error(\n \"You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. \"\n );\n actScopeDepth = prevActScopeDepth;\n }\n function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {\n var queue = ReactSharedInternals.actQueue;\n if (null !== queue)\n if (0 !== queue.length)\n try {\n flushActQueue(queue);\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n });\n return;\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n else ReactSharedInternals.actQueue = null;\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((queue = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(queue))\n : resolve(returnValue);\n }\n function flushActQueue(queue) {\n if (!isFlushing) {\n isFlushing = !0;\n var i = 0;\n try {\n for (; i < queue.length; i++) {\n var callback = queue[i];\n do {\n ReactSharedInternals.didUsePromise = !1;\n var continuation = callback(!1);\n if (null !== continuation) {\n if (ReactSharedInternals.didUsePromise) {\n queue[i] = callback;\n queue.splice(0, i);\n return;\n }\n callback = continuation;\n } else break;\n } while (1);\n }\n queue.length = 0;\n } catch (error) {\n queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error);\n } finally {\n isFlushing = !1;\n }\n }\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_OFFSCREEN_TYPE = Symbol.for(\"react.offscreen\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n didWarnStateUpdateForUnmountedComponent = {},\n ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function (publicInstance) {\n warnNoop(publicInstance, \"forceUpdate\");\n },\n enqueueReplaceState: function (publicInstance) {\n warnNoop(publicInstance, \"replaceState\");\n },\n enqueueSetState: function (publicInstance) {\n warnNoop(publicInstance, \"setState\");\n }\n },\n assign = Object.assign,\n emptyObject = {};\n Object.freeze(emptyObject);\n Component.prototype.isReactComponent = {};\n Component.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n };\n Component.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n };\n var deprecatedAPIs = {\n isMounted: [\n \"isMounted\",\n \"Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks.\"\n ],\n replaceState: [\n \"replaceState\",\n \"Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236).\"\n ]\n },\n fnName;\n for (fnName in deprecatedAPIs)\n deprecatedAPIs.hasOwnProperty(fnName) &&\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n ComponentDummy.prototype = Component.prototype;\n deprecatedAPIs = PureComponent.prototype = new ComponentDummy();\n deprecatedAPIs.constructor = PureComponent;\n assign(deprecatedAPIs, Component.prototype);\n deprecatedAPIs.isPureReactComponent = !0;\n var isArrayImpl = Array.isArray,\n REACT_CLIENT_REFERENCE$2 = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals = {\n H: null,\n A: null,\n T: null,\n S: null,\n V: null,\n actQueue: null,\n isBatchingLegacy: !1,\n didScheduleLegacyUpdate: !1,\n didUsePromise: !1,\n thrownErrors: [],\n getCurrentStack: null\n },\n hasOwnProperty = Object.prototype.hasOwnProperty,\n REACT_CLIENT_REFERENCE$1 = Symbol.for(\"react.client.reference\"),\n disabledDepth = 0,\n prevLog,\n prevInfo,\n prevWarn,\n prevError,\n prevGroup,\n prevGroupCollapsed,\n prevGroupEnd;\n disabledLog.__reactDisabledLog = !0;\n var prefix,\n suffix,\n reentry = !1;\n var componentFrameCache = new (\n \"function\" === typeof WeakMap ? WeakMap : Map\n )();\n var REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n specialPropKeyWarningShown,\n didWarnAboutOldJSXRuntime;\n var didWarnAboutElementRef = {};\n var ownerHasKeyUseWarning = {},\n didWarnAboutMaps = !1,\n userProvidedKeyEscapeRegex = /\\/+/g,\n reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n didWarnAboutMessageChannel = !1,\n enqueueTaskImpl = null,\n actScopeDepth = 0,\n didWarnNoAwaitAct = !1,\n isFlushing = !1,\n queueSeveralMicrotasks =\n \"function\" === typeof queueMicrotask\n ? function (callback) {\n queueMicrotask(function () {\n return queueMicrotask(callback);\n });\n }\n : enqueueTask;\n deprecatedAPIs = Object.freeze({\n __proto__: null,\n c: function (size) {\n return resolveDispatcher().useMemoCache(size);\n }\n });\n exports.Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\n exports.Component = Component;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.PureComponent = PureComponent;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\n exports.__COMPILER_RUNTIME = deprecatedAPIs;\n exports.act = function (callback) {\n var prevActQueue = ReactSharedInternals.actQueue,\n prevActScopeDepth = actScopeDepth;\n actScopeDepth++;\n var queue = (ReactSharedInternals.actQueue =\n null !== prevActQueue ? prevActQueue : []),\n didAwaitActCall = !1;\n try {\n var result = callback();\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n (popActScope(prevActQueue, prevActScopeDepth),\n (callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n if (\n null !== result &&\n \"object\" === typeof result &&\n \"function\" === typeof result.then\n ) {\n var thenable = result;\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);\"\n ));\n });\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n thenable.then(\n function (returnValue) {\n popActScope(prevActQueue, prevActScopeDepth);\n if (0 === prevActScopeDepth) {\n try {\n flushActQueue(queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue,\n resolve,\n reject\n );\n });\n } catch (error$2) {\n ReactSharedInternals.thrownErrors.push(error$2);\n }\n if (0 < ReactSharedInternals.thrownErrors.length) {\n var _thrownError = aggregateErrors(\n ReactSharedInternals.thrownErrors\n );\n ReactSharedInternals.thrownErrors.length = 0;\n reject(_thrownError);\n }\n } else resolve(returnValue);\n },\n function (error) {\n popActScope(prevActQueue, prevActScopeDepth);\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((error = aggregateErrors(\n ReactSharedInternals.thrownErrors\n )),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(error))\n : reject(error);\n }\n );\n }\n };\n }\n var returnValue$jscomp$0 = result;\n popActScope(prevActQueue, prevActScopeDepth);\n 0 === prevActScopeDepth &&\n (flushActQueue(queue),\n 0 !== queue.length &&\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\\n\\nawait act(() => ...)\"\n ));\n }),\n (ReactSharedInternals.actQueue = null));\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n ((callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n 0 === prevActScopeDepth\n ? ((ReactSharedInternals.actQueue = queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue$jscomp$0,\n resolve,\n reject\n );\n }))\n : resolve(returnValue$jscomp$0);\n }\n };\n };\n exports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n };\n exports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" +\n element +\n \".\"\n );\n var props = assign({}, element.props),\n key = element.key,\n owner = element._owner;\n if (null != config) {\n var JSCompiler_inline_result;\n a: {\n if (\n hasOwnProperty.call(config, \"ref\") &&\n (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(\n config,\n \"ref\"\n ).get) &&\n JSCompiler_inline_result.isReactWarning\n ) {\n JSCompiler_inline_result = !1;\n break a;\n }\n JSCompiler_inline_result = void 0 !== config.ref;\n }\n JSCompiler_inline_result && (owner = getOwner());\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (key = \"\" + config.key));\n for (propName in config)\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n }\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n JSCompiler_inline_result = Array(propName);\n for (var i = 0; i < propName; i++)\n JSCompiler_inline_result[i] = arguments[i + 2];\n props.children = JSCompiler_inline_result;\n }\n props = ReactElement(element.type, key, void 0, void 0, owner, props);\n for (key = 2; key < arguments.length; key++)\n validateChildKeys(arguments[key], props.type);\n return props;\n };\n exports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n defaultValue._currentRenderer = null;\n defaultValue._currentRenderer2 = null;\n return defaultValue;\n };\n exports.createElement = function (type, config, children) {\n if (isValidElementType(type))\n for (var i = 2; i < arguments.length; i++)\n validateChildKeys(arguments[i], type);\n else {\n i = \"\";\n if (\n void 0 === type ||\n (\"object\" === typeof type &&\n null !== type &&\n 0 === Object.keys(type).length)\n )\n i +=\n \" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\";\n if (null === type) var typeString = \"null\";\n else\n isArrayImpl(type)\n ? (typeString = \"array\")\n : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE\n ? ((typeString =\n \"<\" +\n (getComponentNameFromType(type.type) || \"Unknown\") +\n \" />\"),\n (i =\n \" Did you accidentally export a JSX literal instead of a component?\"))\n : (typeString = typeof type);\n console.error(\n \"React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s\",\n typeString,\n i\n );\n }\n var propName;\n i = {};\n typeString = null;\n if (null != config)\n for (propName in (didWarnAboutOldJSXRuntime ||\n !(\"__self\" in config) ||\n \"key\" in config ||\n ((didWarnAboutOldJSXRuntime = !0),\n console.warn(\n \"Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform\"\n )),\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (typeString = \"\" + config.key)),\n config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (i[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) i.children = children;\n else if (1 < childrenLength) {\n for (\n var childArray = Array(childrenLength), _i = 0;\n _i < childrenLength;\n _i++\n )\n childArray[_i] = arguments[_i + 2];\n Object.freeze && Object.freeze(childArray);\n i.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === i[propName] && (i[propName] = childrenLength[propName]);\n typeString &&\n defineKeyPropWarningGetter(\n i,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(type, typeString, void 0, void 0, getOwner(), i);\n };\n exports.createRef = function () {\n var refObject = { current: null };\n Object.seal(refObject);\n return refObject;\n };\n exports.forwardRef = function (render) {\n null != render && render.$$typeof === REACT_MEMO_TYPE\n ? console.error(\n \"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).\"\n )\n : \"function\" !== typeof render\n ? console.error(\n \"forwardRef requires a render function but was given %s.\",\n null === render ? \"null\" : typeof render\n )\n : 0 !== render.length &&\n 2 !== render.length &&\n console.error(\n \"forwardRef render functions accept exactly two parameters: props and ref. %s\",\n 1 === render.length\n ? \"Did you forget to use the ref parameter?\"\n : \"Any additional parameter will be undefined.\"\n );\n null != render &&\n null != render.defaultProps &&\n console.error(\n \"forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?\"\n );\n var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render },\n ownName;\n Object.defineProperty(elementType, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n render.name ||\n render.displayName ||\n (Object.defineProperty(render, \"name\", { value: name }),\n (render.displayName = name));\n }\n });\n return elementType;\n };\n exports.isValidElement = isValidElement;\n exports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n };\n exports.memo = function (type, compare) {\n isValidElementType(type) ||\n console.error(\n \"memo: The first argument must be a component. Instead received: %s\",\n null === type ? \"null\" : typeof type\n );\n compare = {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n var ownName;\n Object.defineProperty(compare, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n type.name ||\n type.displayName ||\n (Object.defineProperty(type, \"name\", { value: name }),\n (type.displayName = name));\n }\n });\n return compare;\n };\n exports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n currentTransition._updatedFibers = new Set();\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((scope = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < scope &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n )),\n (ReactSharedInternals.T = prevTransition);\n }\n };\n exports.unstable_useCacheRefresh = function () {\n return resolveDispatcher().useCacheRefresh();\n };\n exports.use = function (usable) {\n return resolveDispatcher().use(usable);\n };\n exports.useActionState = function (action, initialState, permalink) {\n return resolveDispatcher().useActionState(\n action,\n initialState,\n permalink\n );\n };\n exports.useCallback = function (callback, deps) {\n return resolveDispatcher().useCallback(callback, deps);\n };\n exports.useContext = function (Context) {\n var dispatcher = resolveDispatcher();\n Context.$$typeof === REACT_CONSUMER_TYPE &&\n console.error(\n \"Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?\"\n );\n return dispatcher.useContext(Context);\n };\n exports.useDebugValue = function (value, formatterFn) {\n return resolveDispatcher().useDebugValue(value, formatterFn);\n };\n exports.useDeferredValue = function (value, initialValue) {\n return resolveDispatcher().useDeferredValue(value, initialValue);\n };\n exports.useEffect = function (create, deps) {\n return resolveDispatcher().useEffect(create, deps);\n };\n exports.useId = function () {\n return resolveDispatcher().useId();\n };\n exports.useImperativeHandle = function (ref, create, deps) {\n return resolveDispatcher().useImperativeHandle(ref, create, deps);\n };\n exports.useInsertionEffect = function (create, deps) {\n return resolveDispatcher().useInsertionEffect(create, deps);\n };\n exports.useLayoutEffect = function (create, deps) {\n return resolveDispatcher().useLayoutEffect(create, deps);\n };\n exports.useMemo = function (create, deps) {\n return resolveDispatcher().useMemo(create, deps);\n };\n exports.useOptimistic = function (passthrough, reducer) {\n return resolveDispatcher().useOptimistic(passthrough, reducer);\n };\n exports.useReducer = function (reducer, initialArg, init) {\n return resolveDispatcher().useReducer(reducer, initialArg, init);\n };\n exports.useRef = function (initialValue) {\n return resolveDispatcher().useRef(initialValue);\n };\n exports.useState = function (initialState) {\n return resolveDispatcher().useState(initialState);\n };\n exports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n return resolveDispatcher().useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n };\n exports.useTransition = function () {\n return resolveDispatcher().useTransition();\n };\n exports.version = \"19.1.0-canary-de1eaa26-20250124\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","(()=>{\"use strict\";var e={328:e=>{function hash(e){var r=5381,_=e.length;while(_){r=r*33^e.charCodeAt(--_)}return r>>>0}e.exports=hash}};var r={};function __nccwpck_require__(_){var a=r[_];if(a!==undefined){return a.exports}var t=r[_]={exports:{}};var i=true;try{e[_](t,t.exports,__nccwpck_require__);i=false}finally{if(i)delete r[_]}return t.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var _=__nccwpck_require__(328);module.exports=_})();","// ISC License\n\n// Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov\n\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n//\n// https://github.com/alexeyraspopov/picocolors/blob/b6261487e7b81aaab2440e397a356732cad9e342/picocolors.js#L1\n\nconst { env, stdout } = globalThis?.process ?? {}\n\nconst enabled =\n env &&\n !env.NO_COLOR &&\n (env.FORCE_COLOR || (stdout?.isTTY && !env.CI && env.TERM !== 'dumb'))\n\nconst replaceClose = (\n str: string,\n close: string,\n replace: string,\n index: number\n): string => {\n const start = str.substring(0, index) + replace\n const end = str.substring(index + close.length)\n const nextIndex = end.indexOf(close)\n return ~nextIndex\n ? start + replaceClose(end, close, replace, nextIndex)\n : start + end\n}\n\nconst formatter = (open: string, close: string, replace = open) => {\n if (!enabled) return String\n return (input: string) => {\n const string = '' + input\n const index = string.indexOf(close, open.length)\n return ~index\n ? open + replaceClose(string, close, replace, index) + close\n : open + string + close\n }\n}\n\nexport const reset = enabled ? (s: string) => `\\x1b[0m${s}\\x1b[0m` : String\nexport const bold = formatter('\\x1b[1m', '\\x1b[22m', '\\x1b[22m\\x1b[1m')\nexport const dim = formatter('\\x1b[2m', '\\x1b[22m', '\\x1b[22m\\x1b[2m')\nexport const italic = formatter('\\x1b[3m', '\\x1b[23m')\nexport const underline = formatter('\\x1b[4m', '\\x1b[24m')\nexport const inverse = formatter('\\x1b[7m', '\\x1b[27m')\nexport const hidden = formatter('\\x1b[8m', '\\x1b[28m')\nexport const strikethrough = formatter('\\x1b[9m', '\\x1b[29m')\nexport const black = formatter('\\x1b[30m', '\\x1b[39m')\nexport const red = formatter('\\x1b[31m', '\\x1b[39m')\nexport const green = formatter('\\x1b[32m', '\\x1b[39m')\nexport const yellow = formatter('\\x1b[33m', '\\x1b[39m')\nexport const blue = formatter('\\x1b[34m', '\\x1b[39m')\nexport const magenta = formatter('\\x1b[35m', '\\x1b[39m')\nexport const purple = formatter('\\x1b[38;2;173;127;168m', '\\x1b[39m')\nexport const cyan = formatter('\\x1b[36m', '\\x1b[39m')\nexport const white = formatter('\\x1b[37m', '\\x1b[39m')\nexport const gray = formatter('\\x1b[90m', '\\x1b[39m')\nexport const bgBlack = formatter('\\x1b[40m', '\\x1b[49m')\nexport const bgRed = formatter('\\x1b[41m', '\\x1b[49m')\nexport const bgGreen = formatter('\\x1b[42m', '\\x1b[49m')\nexport const bgYellow = formatter('\\x1b[43m', '\\x1b[49m')\nexport const bgBlue = formatter('\\x1b[44m', '\\x1b[49m')\nexport const bgMagenta = formatter('\\x1b[45m', '\\x1b[49m')\nexport const bgCyan = formatter('\\x1b[46m', '\\x1b[49m')\nexport const bgWhite = formatter('\\x1b[47m', '\\x1b[49m')\n","import type { RouteDefinition } from '../route-definitions/route-definition'\n\n/**\n * RouteModuleOptions is the options that are passed to the route module, other\n * route modules should extend this class to add specific options for their\n * route.\n */\nexport interface RouteModuleOptions<\n D extends RouteDefinition = RouteDefinition,\n U = unknown,\n> {\n readonly definition: Readonly<D>\n readonly userland: Readonly<U>\n}\n\n/**\n * RouteHandlerContext is the base context for a route handler.\n */\nexport interface RouteModuleHandleContext {\n /**\n * Any matched parameters for the request. This is only defined for dynamic\n * routes.\n */\n params: Record<string, string | string[] | undefined> | undefined\n}\n\n/**\n * RouteModule is the base class for all route modules. This class should be\n * extended by all route modules.\n */\nexport abstract class RouteModule<\n D extends RouteDefinition = RouteDefinition,\n U = unknown,\n> {\n /**\n * The userland module. This is the module that is exported from the user's\n * code. This is marked as readonly to ensure that the module is not mutated\n * because the module (when compiled) only provides getters.\n */\n public readonly userland: Readonly<U>\n\n /**\n * The definition of the route.\n */\n public readonly definition: Readonly<D>\n\n /**\n * The shared modules that are exposed and required for the route module.\n */\n public static readonly sharedModules: any\n\n constructor({ userland, definition }: RouteModuleOptions<D, U>) {\n this.userland = userland\n this.definition = definition\n }\n}\n","export const RSC_HEADER = 'RSC' as const\nexport const ACTION_HEADER = 'Next-Action' as const\n// TODO: Instead of sending the full router state, we only need to send the\n// segment path. Saves bytes. Then we could also use this field for segment\n// prefetches, which also need to specify a particular segment.\nexport const NEXT_ROUTER_STATE_TREE_HEADER = 'Next-Router-State-Tree' as const\nexport const NEXT_ROUTER_PREFETCH_HEADER = 'Next-Router-Prefetch' as const\n// This contains the path to the segment being prefetched.\n// TODO: If we change Next-Router-State-Tree to be a segment path, we can use\n// that instead. Then Next-Router-Prefetch and Next-Router-Segment-Prefetch can\n// be merged into a single enum.\nexport const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER =\n 'Next-Router-Segment-Prefetch' as const\nexport const NEXT_HMR_REFRESH_HEADER = 'Next-HMR-Refresh' as const\nexport const NEXT_URL = 'Next-Url' as const\nexport const RSC_CONTENT_TYPE_HEADER = 'text/x-component' as const\n\nexport const FLIGHT_HEADERS = [\n RSC_HEADER,\n NEXT_ROUTER_STATE_TREE_HEADER,\n NEXT_ROUTER_PREFETCH_HEADER,\n NEXT_HMR_REFRESH_HEADER,\n NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,\n] as const\n\nexport const NEXT_RSC_UNION_QUERY = '_rsc' as const\n\nexport const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time' as const\nexport const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed' as const\nexport const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path' as const\nexport const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query' as const\nexport const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender' as const\n","export class ReflectAdapter {\n static get<T extends object>(\n target: T,\n prop: string | symbol,\n receiver: unknown\n ): any {\n const value = Reflect.get(target, prop, receiver)\n if (typeof value === 'function') {\n return value.bind(target)\n }\n\n return value\n }\n\n static set<T extends object>(\n target: T,\n prop: string | symbol,\n value: any,\n receiver: any\n ): boolean {\n return Reflect.set(target, prop, value, receiver)\n }\n\n static has<T extends object>(target: T, prop: string | symbol): boolean {\n return Reflect.has(target, prop)\n }\n\n static deleteProperty<T extends object>(\n target: T,\n prop: string | symbol\n ): boolean {\n return Reflect.deleteProperty(target, prop)\n }\n}\n","import type { IncomingHttpHeaders } from 'http'\n\nimport { ReflectAdapter } from './reflect'\n\n/**\n * @internal\n */\nexport class ReadonlyHeadersError extends Error {\n constructor() {\n super(\n 'Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'\n )\n }\n\n public static callable() {\n throw new ReadonlyHeadersError()\n }\n}\n\nexport type ReadonlyHeaders = Headers & {\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n append(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n set(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n delete(...args: any[]): void\n}\nexport class HeadersAdapter extends Headers {\n private readonly headers: IncomingHttpHeaders\n\n constructor(headers: IncomingHttpHeaders) {\n // We've already overridden the methods that would be called, so we're just\n // calling the super constructor to ensure that the instanceof check works.\n super()\n\n this.headers = new Proxy(headers, {\n get(target, prop, receiver) {\n // Because this is just an object, we expect that all \"get\" operations\n // are for properties. If it's a \"get\" for a symbol, we'll just return\n // the symbol.\n if (typeof prop === 'symbol') {\n return ReflectAdapter.get(target, prop, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return undefined.\n if (typeof original === 'undefined') return\n\n // If the original casing exists, return the value.\n return ReflectAdapter.get(target, original, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'symbol') {\n return ReflectAdapter.set(target, prop, value, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, use the prop as the key.\n return ReflectAdapter.set(target, original ?? prop, value, receiver)\n },\n has(target, prop) {\n if (typeof prop === 'symbol') return ReflectAdapter.has(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return false.\n if (typeof original === 'undefined') return false\n\n // If the original casing exists, return true.\n return ReflectAdapter.has(target, original)\n },\n deleteProperty(target, prop) {\n if (typeof prop === 'symbol')\n return ReflectAdapter.deleteProperty(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return true.\n if (typeof original === 'undefined') return true\n\n // If the original casing exists, delete the property.\n return ReflectAdapter.deleteProperty(target, original)\n },\n })\n }\n\n /**\n * Seals a Headers instance to prevent modification by throwing an error when\n * any mutating method is called.\n */\n public static seal(headers: Headers): ReadonlyHeaders {\n return new Proxy<ReadonlyHeaders>(headers, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'append':\n case 'delete':\n case 'set':\n return ReadonlyHeadersError.callable\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n }\n\n /**\n * Merges a header value into a string. This stores multiple values as an\n * array, so we need to merge them into a string.\n *\n * @param value a header value\n * @returns a merged header value (a string)\n */\n private merge(value: string | string[]): string {\n if (Array.isArray(value)) return value.join(', ')\n\n return value\n }\n\n /**\n * Creates a Headers instance from a plain object or a Headers instance.\n *\n * @param headers a plain object or a Headers instance\n * @returns a headers instance\n */\n public static from(headers: IncomingHttpHeaders | Headers): Headers {\n if (headers instanceof Headers) return headers\n\n return new HeadersAdapter(headers)\n }\n\n public append(name: string, value: string): void {\n const existing = this.headers[name]\n if (typeof existing === 'string') {\n this.headers[name] = [existing, value]\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n this.headers[name] = value\n }\n }\n\n public delete(name: string): void {\n delete this.headers[name]\n }\n\n public get(name: string): string | null {\n const value = this.headers[name]\n if (typeof value !== 'undefined') return this.merge(value)\n\n return null\n }\n\n public has(name: string): boolean {\n return typeof this.headers[name] !== 'undefined'\n }\n\n public set(name: string, value: string): void {\n this.headers[name] = value\n }\n\n public forEach(\n callbackfn: (value: string, name: string, parent: Headers) => void,\n thisArg?: any\n ): void {\n for (const [name, value] of this.entries()) {\n callbackfn.call(thisArg, value, name, this)\n }\n }\n\n public *entries(): HeadersIterator<[string, string]> {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(name) as string\n\n yield [name, value] as [string, string]\n }\n }\n\n public *keys(): HeadersIterator<string> {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n yield name\n }\n }\n\n public *values(): HeadersIterator<string> {\n for (const key of Object.keys(this.headers)) {\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(key) as string\n\n yield value\n }\n }\n\n public [Symbol.iterator](): HeadersIterator<[string, string]> {\n return this.entries()\n }\n}\n","import { RequestCookies } from '../cookies'\n\nimport { ResponseCookies } from '../cookies'\nimport { ReflectAdapter } from './reflect'\nimport { workAsyncStorage } from '../../../app-render/work-async-storage.external'\nimport {\n getExpectedRequestStore,\n type RequestStore,\n} from '../../../app-render/work-unit-async-storage.external'\n\n/**\n * @internal\n */\nexport class ReadonlyRequestCookiesError extends Error {\n constructor() {\n super(\n 'Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options'\n )\n }\n\n public static callable() {\n throw new ReadonlyRequestCookiesError()\n }\n}\n\n// We use this to type some APIs but we don't construct instances directly\nexport type { ResponseCookies }\n\n// The `cookies()` API is a mix of request and response cookies. For `.get()` methods,\n// we want to return the request cookie if it exists. For mutative methods like `.set()`,\n// we want to return the response cookie.\nexport type ReadonlyRequestCookies = Omit<\n RequestCookies,\n 'set' | 'clear' | 'delete'\n> &\n Pick<ResponseCookies, 'set' | 'delete'>\n\nexport class RequestCookiesAdapter {\n public static seal(cookies: RequestCookies): ReadonlyRequestCookies {\n return new Proxy(cookies as any, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'clear':\n case 'delete':\n case 'set':\n return ReadonlyRequestCookiesError.callable\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n }\n}\n\nconst SYMBOL_MODIFY_COOKIE_VALUES = Symbol.for('next.mutated.cookies')\n\nexport function getModifiedCookieValues(\n cookies: ResponseCookies\n): ResponseCookie[] {\n const modified: ResponseCookie[] | undefined = (cookies as unknown as any)[\n SYMBOL_MODIFY_COOKIE_VALUES\n ]\n if (!modified || !Array.isArray(modified) || modified.length === 0) {\n return []\n }\n\n return modified\n}\n\ntype SetCookieArgs =\n | [key: string, value: string, cookie?: Partial<ResponseCookie>]\n | [options: ResponseCookie]\n\nexport function appendMutableCookies(\n headers: Headers,\n mutableCookies: ResponseCookies\n): boolean {\n const modifiedCookieValues = getModifiedCookieValues(mutableCookies)\n if (modifiedCookieValues.length === 0) {\n return false\n }\n\n // Return a new response that extends the response with\n // the modified cookies as fallbacks. `res` cookies\n // will still take precedence.\n const resCookies = new ResponseCookies(headers)\n const returnedCookies = resCookies.getAll()\n\n // Set the modified cookies as fallbacks.\n for (const cookie of modifiedCookieValues) {\n resCookies.set(cookie)\n }\n\n // Set the original cookies as the final values.\n for (const cookie of returnedCookies) {\n resCookies.set(cookie)\n }\n\n return true\n}\n\ntype ResponseCookie = NonNullable<\n ReturnType<InstanceType<typeof ResponseCookies>['get']>\n>\n\nexport class MutableRequestCookiesAdapter {\n public static wrap(\n cookies: RequestCookies,\n onUpdateCookies?: (cookies: string[]) => void\n ): ResponseCookies {\n const responseCookies = new ResponseCookies(new Headers())\n for (const cookie of cookies.getAll()) {\n responseCookies.set(cookie)\n }\n\n let modifiedValues: ResponseCookie[] = []\n const modifiedCookies = new Set<string>()\n const updateResponseCookies = () => {\n // TODO-APP: change method of getting workStore\n const workStore = workAsyncStorage.getStore()\n if (workStore) {\n workStore.pathWasRevalidated = true\n }\n\n const allCookies = responseCookies.getAll()\n modifiedValues = allCookies.filter((c) => modifiedCookies.has(c.name))\n if (onUpdateCookies) {\n const serializedCookies: string[] = []\n for (const cookie of modifiedValues) {\n const tempCookies = new ResponseCookies(new Headers())\n tempCookies.set(cookie)\n serializedCookies.push(tempCookies.toString())\n }\n\n onUpdateCookies(serializedCookies)\n }\n }\n\n const wrappedCookies = new Proxy(responseCookies, {\n get(target, prop, receiver) {\n switch (prop) {\n // A special symbol to get the modified cookie values\n case SYMBOL_MODIFY_COOKIE_VALUES:\n return modifiedValues\n\n // TODO: Throw error if trying to set a cookie after the response\n // headers have been set.\n case 'delete':\n return function (...args: [string] | [ResponseCookie]) {\n modifiedCookies.add(\n typeof args[0] === 'string' ? args[0] : args[0].name\n )\n try {\n target.delete(...args)\n return wrappedCookies\n } finally {\n updateResponseCookies()\n }\n }\n case 'set':\n return function (...args: SetCookieArgs) {\n modifiedCookies.add(\n typeof args[0] === 'string' ? args[0] : args[0].name\n )\n try {\n target.set(...args)\n return wrappedCookies\n } finally {\n updateResponseCookies()\n }\n }\n\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n\n return wrappedCookies\n }\n}\n\nexport function wrapWithMutableAccessCheck(\n responseCookies: ResponseCookies\n): ResponseCookies {\n const wrappedCookies = new Proxy(responseCookies, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'delete':\n return function (...args: [string] | [ResponseCookie]) {\n ensureCookiesAreStillMutable('cookies().delete')\n target.delete(...args)\n return wrappedCookies\n }\n case 'set':\n return function (...args: SetCookieArgs) {\n ensureCookiesAreStillMutable('cookies().set')\n target.set(...args)\n return wrappedCookies\n }\n\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n return wrappedCookies\n}\n\nexport function areCookiesMutableInCurrentPhase(requestStore: RequestStore) {\n return requestStore.phase === 'action'\n}\n\n/** Ensure that cookies() starts throwing on mutation\n * if we changed phases and can no longer mutate.\n *\n * This can happen when going:\n * 'render' -> 'after'\n * 'action' -> 'render'\n * */\nfunction ensureCookiesAreStillMutable(callingExpression: string) {\n const requestStore = getExpectedRequestStore(callingExpression)\n if (!areCookiesMutableInCurrentPhase(requestStore)) {\n // TODO: maybe we can give a more precise error message based on callingExpression?\n throw new ReadonlyRequestCookiesError()\n }\n}\n\nexport function responseCookiesToRequestCookies(\n responseCookies: ResponseCookies\n): RequestCookies {\n const requestCookies = new RequestCookies(new Headers())\n for (const cookie of responseCookies.getAll()) {\n requestCookies.set(cookie)\n }\n return requestCookies\n}\n","import type { ServerRuntime } from '../types'\n\nexport const NEXT_QUERY_PARAM_PREFIX = 'nxtP'\nexport const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'\n\nexport const MATCHED_PATH_HEADER = 'x-matched-path'\nexport const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'\nexport const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER =\n 'x-prerender-revalidate-if-generated'\n\nexport const RSC_PREFETCH_SUFFIX = '.prefetch.rsc'\nexport const RSC_SEGMENTS_DIR_SUFFIX = '.segments'\nexport const RSC_SEGMENT_SUFFIX = '.segment.rsc'\nexport const RSC_SUFFIX = '.rsc'\nexport const ACTION_SUFFIX = '.action'\nexport const NEXT_DATA_SUFFIX = '.json'\nexport const NEXT_META_SUFFIX = '.meta'\nexport const NEXT_BODY_SUFFIX = '.body'\n\nexport const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'\nexport const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'\nexport const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER =\n 'x-next-revalidate-tag-token'\n\nexport const NEXT_RESUME_HEADER = 'next-resume'\n\n// if these change make sure we update the related\n// documentation as well\nexport const NEXT_CACHE_TAG_MAX_ITEMS = 128\nexport const NEXT_CACHE_TAG_MAX_LENGTH = 256\nexport const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024\nexport const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'\n\n// in seconds\nexport const CACHE_ONE_YEAR = 31536000\n\n// in seconds, represents revalidate=false. I.e. never revaliate.\n// We use this value since it can be represented as a V8 SMI for optimal performance.\n// It can also be serialized as JSON if it ever leaks accidentally as an actual value.\nexport const INFINITE_CACHE = 0xfffffffe\n\n// Patterns to detect middleware files\nexport const MIDDLEWARE_FILENAME = 'middleware'\nexport const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`\n\n// Pattern to detect instrumentation hooks file\nexport const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'\n\n// Because on Windows absolute paths in the generated code can break because of numbers, eg 1 in the path,\n// we have to use a private alias\nexport const PAGES_DIR_ALIAS = 'private-next-pages'\nexport const DOT_NEXT_ALIAS = 'private-dot-next'\nexport const ROOT_DIR_ALIAS = 'private-next-root-dir'\nexport const APP_DIR_ALIAS = 'private-next-app-dir'\nexport const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'\nexport const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'\nexport const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'\nexport const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'\nexport const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'\nexport const RSC_ACTION_CLIENT_WRAPPER_ALIAS =\n 'private-next-rsc-action-client-wrapper'\n\nexport const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`\n\nexport const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`\n\nexport const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`\n\nexport const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`\n\nexport const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`\n\nexport const SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`\n\nexport const GSP_NO_RETURNED_VALUE =\n 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'\nexport const GSSP_NO_RETURNED_VALUE =\n 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'\n\nexport const UNSTABLE_REVALIDATE_RENAME_ERROR =\n 'The `unstable_revalidate` property is available for general use.\\n' +\n 'Please use `revalidate` instead.'\n\nexport const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`\n\nexport const NON_STANDARD_NODE_ENV = `You are using a non-standard \"NODE_ENV\" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`\n\nexport const SSG_FALLBACK_EXPORT_ERROR = `Pages with \\`fallback\\` enabled in \\`getStaticPaths\\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`\n\nexport const ESLINT_DEFAULT_DIRS = ['app', 'pages', 'components', 'lib', 'src']\n\nexport const SERVER_RUNTIME: Record<string, ServerRuntime> = {\n edge: 'edge',\n experimentalEdge: 'experimental-edge',\n nodejs: 'nodejs',\n}\n\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */\nconst WEBPACK_LAYERS_NAMES = {\n /**\n * The layer for the shared code between the client and server bundles.\n */\n shared: 'shared',\n /**\n * The layer for server-only runtime and picking up `react-server` export conditions.\n * Including app router RSC pages and app router custom routes and metadata routes.\n */\n reactServerComponents: 'rsc',\n /**\n * Server Side Rendering layer for app (ssr).\n */\n serverSideRendering: 'ssr',\n /**\n * The browser client bundle layer for actions.\n */\n actionBrowser: 'action-browser',\n /**\n * The layer for the API routes.\n */\n api: 'api',\n /**\n * The layer for the middleware code.\n */\n middleware: 'middleware',\n /**\n * The layer for the instrumentation hooks.\n */\n instrument: 'instrument',\n /**\n * The layer for assets on the edge.\n */\n edgeAsset: 'edge-asset',\n /**\n * The browser client bundle layer for App directory.\n */\n appPagesBrowser: 'app-pages-browser',\n} as const\n\nexport type WebpackLayerName =\n (typeof WEBPACK_LAYERS_NAMES)[keyof typeof WEBPACK_LAYERS_NAMES]\n\nconst WEBPACK_LAYERS = {\n ...WEBPACK_LAYERS_NAMES,\n GROUP: {\n builtinReact: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n serverOnly: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n neutralTarget: [\n // pages api\n WEBPACK_LAYERS_NAMES.api,\n ],\n clientOnly: [\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n ],\n bundled: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.shared,\n WEBPACK_LAYERS_NAMES.instrument,\n ],\n appPages: [\n // app router pages and layouts\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n },\n}\n\nconst WEBPACK_RESOURCE_QUERIES = {\n edgeSSREntry: '__next_edge_ssr_entry__',\n metadata: '__next_metadata__',\n metadataRoute: '__next_metadata_route__',\n metadataImageMeta: '__next_metadata_image_meta__',\n}\n\nexport { WEBPACK_LAYERS, WEBPACK_RESOURCE_QUERIES }\n","/**\n * Contains predefined constants for the trace span name in next/server.\n *\n * Currently, next/server/tracer is internal implementation only for tracking\n * next.js's implementation only with known span names defined here.\n **/\n\n// eslint typescript has a bug with TS enums\n/* eslint-disable no-shadow */\n\nenum BaseServerSpan {\n handleRequest = 'BaseServer.handleRequest',\n run = 'BaseServer.run',\n pipe = 'BaseServer.pipe',\n getStaticHTML = 'BaseServer.getStaticHTML',\n render = 'BaseServer.render',\n renderToResponseWithComponents = 'BaseServer.renderToResponseWithComponents',\n renderToResponse = 'BaseServer.renderToResponse',\n renderToHTML = 'BaseServer.renderToHTML',\n renderError = 'BaseServer.renderError',\n renderErrorToResponse = 'BaseServer.renderErrorToResponse',\n renderErrorToHTML = 'BaseServer.renderErrorToHTML',\n render404 = 'BaseServer.render404',\n}\n\nenum LoadComponentsSpan {\n loadDefaultErrorComponents = 'LoadComponents.loadDefaultErrorComponents',\n loadComponents = 'LoadComponents.loadComponents',\n}\n\nenum NextServerSpan {\n getRequestHandler = 'NextServer.getRequestHandler',\n getServer = 'NextServer.getServer',\n getServerRequestHandler = 'NextServer.getServerRequestHandler',\n createServer = 'createServer.createServer',\n}\n\nenum NextNodeServerSpan {\n compression = 'NextNodeServer.compression',\n getBuildId = 'NextNodeServer.getBuildId',\n createComponentTree = 'NextNodeServer.createComponentTree',\n clientComponentLoading = 'NextNodeServer.clientComponentLoading',\n getLayoutOrPageModule = 'NextNodeServer.getLayoutOrPageModule',\n generateStaticRoutes = 'NextNodeServer.generateStaticRoutes',\n generateFsStaticRoutes = 'NextNodeServer.generateFsStaticRoutes',\n generatePublicRoutes = 'NextNodeServer.generatePublicRoutes',\n generateImageRoutes = 'NextNodeServer.generateImageRoutes.route',\n sendRenderResult = 'NextNodeServer.sendRenderResult',\n proxyRequest = 'NextNodeServer.proxyRequest',\n runApi = 'NextNodeServer.runApi',\n render = 'NextNodeServer.render',\n renderHTML = 'NextNodeServer.renderHTML',\n imageOptimizer = 'NextNodeServer.imageOptimizer',\n getPagePath = 'NextNodeServer.getPagePath',\n getRoutesManifest = 'NextNodeServer.getRoutesManifest',\n findPageComponents = 'NextNodeServer.findPageComponents',\n getFontManifest = 'NextNodeServer.getFontManifest',\n getServerComponentManifest = 'NextNodeServer.getServerComponentManifest',\n getRequestHandler = 'NextNodeServer.getRequestHandler',\n renderToHTML = 'NextNodeServer.renderToHTML',\n renderError = 'NextNodeServer.renderError',\n renderErrorToHTML = 'NextNodeServer.renderErrorToHTML',\n render404 = 'NextNodeServer.render404',\n startResponse = 'NextNodeServer.startResponse',\n\n // nested inner span, does not require parent scope name\n route = 'route',\n onProxyReq = 'onProxyReq',\n apiResolver = 'apiResolver',\n internalFetch = 'internalFetch',\n}\n\nenum StartServerSpan {\n startServer = 'startServer.startServer',\n}\n\nenum RenderSpan {\n getServerSideProps = 'Render.getServerSideProps',\n getStaticProps = 'Render.getStaticProps',\n renderToString = 'Render.renderToString',\n renderDocument = 'Render.renderDocument',\n createBodyResult = 'Render.createBodyResult',\n}\n\nenum AppRenderSpan {\n renderToString = 'AppRender.renderToString',\n renderToReadableStream = 'AppRender.renderToReadableStream',\n getBodyResult = 'AppRender.getBodyResult',\n fetch = 'AppRender.fetch',\n}\n\nenum RouterSpan {\n executeRoute = 'Router.executeRoute',\n}\n\nenum NodeSpan {\n runHandler = 'Node.runHandler',\n}\n\nenum AppRouteRouteHandlersSpan {\n runHandler = 'AppRouteRouteHandlers.runHandler',\n}\n\nenum ResolveMetadataSpan {\n generateMetadata = 'ResolveMetadata.generateMetadata',\n generateViewport = 'ResolveMetadata.generateViewport',\n}\n\nenum MiddlewareSpan {\n execute = 'Middleware.execute',\n}\n\ntype SpanTypes =\n | `${BaseServerSpan}`\n | `${LoadComponentsSpan}`\n | `${NextServerSpan}`\n | `${StartServerSpan}`\n | `${NextNodeServerSpan}`\n | `${RenderSpan}`\n | `${RouterSpan}`\n | `${AppRenderSpan}`\n | `${NodeSpan}`\n | `${AppRouteRouteHandlersSpan}`\n | `${ResolveMetadataSpan}`\n | `${MiddlewareSpan}`\n\n// This list is used to filter out spans that are not relevant to the user\nexport const NextVanillaSpanAllowlist = [\n MiddlewareSpan.execute,\n BaseServerSpan.handleRequest,\n RenderSpan.getServerSideProps,\n RenderSpan.getStaticProps,\n AppRenderSpan.fetch,\n AppRenderSpan.getBodyResult,\n RenderSpan.renderDocument,\n NodeSpan.runHandler,\n AppRouteRouteHandlersSpan.runHandler,\n ResolveMetadataSpan.generateMetadata,\n ResolveMetadataSpan.generateViewport,\n NextNodeServerSpan.createComponentTree,\n NextNodeServerSpan.findPageComponents,\n NextNodeServerSpan.getLayoutOrPageModule,\n NextNodeServerSpan.startResponse,\n NextNodeServerSpan.clientComponentLoading,\n]\n\n// These Spans are allowed to be always logged\n// when the otel log prefix env is set\nexport const LogSpanAllowList = [\n NextNodeServerSpan.findPageComponents,\n NextNodeServerSpan.createComponentTree,\n NextNodeServerSpan.clientComponentLoading,\n]\n\nexport {\n BaseServerSpan,\n LoadComponentsSpan,\n NextServerSpan,\n NextNodeServerSpan,\n StartServerSpan,\n RenderSpan,\n RouterSpan,\n AppRenderSpan,\n NodeSpan,\n AppRouteRouteHandlersSpan,\n ResolveMetadataSpan,\n MiddlewareSpan,\n}\n\nexport type { SpanTypes }\n","import type { IncomingMessage } from 'http'\nimport type { BaseNextRequest } from '../base-http'\nimport type { CookieSerializeOptions } from 'next/dist/compiled/cookie'\nimport type { NextApiResponse } from '../../shared/lib/utils'\n\nimport { HeadersAdapter } from '../web/spec-extension/adapters/headers'\nimport {\n PRERENDER_REVALIDATE_HEADER,\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER,\n} from '../../lib/constants'\nimport { getTracer } from '../lib/trace/tracer'\nimport { NodeSpan } from '../lib/trace/constants'\n\nexport type NextApiRequestCookies = Partial<{ [key: string]: string }>\nexport type NextApiRequestQuery = Partial<{ [key: string]: string | string[] }>\n\nexport type __ApiPreviewProps = {\n previewModeId: string\n previewModeEncryptionKey: string\n previewModeSigningKey: string\n}\n\nexport function wrapApiHandler<T extends (...args: any[]) => any>(\n page: string,\n handler: T\n): T {\n return ((...args) => {\n getTracer().setRootSpanAttribute('next.route', page)\n // Call API route method\n return getTracer().trace(\n NodeSpan.runHandler,\n {\n spanName: `executing api route (pages) ${page}`,\n },\n () => handler(...args)\n )\n }) as T\n}\n\n/**\n *\n * @param res response object\n * @param statusCode `HTTP` status code of response\n */\nexport function sendStatusCode(\n res: NextApiResponse,\n statusCode: number\n): NextApiResponse<any> {\n res.statusCode = statusCode\n return res\n}\n\n/**\n *\n * @param res response object\n * @param [statusOrUrl] `HTTP` status code of redirect\n * @param url URL of redirect\n */\nexport function redirect(\n res: NextApiResponse,\n statusOrUrl: string | number,\n url?: string\n): NextApiResponse<any> {\n if (typeof statusOrUrl === 'string') {\n url = statusOrUrl\n statusOrUrl = 307\n }\n if (typeof statusOrUrl !== 'number' || typeof url !== 'string') {\n throw new Error(\n `Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`\n )\n }\n res.writeHead(statusOrUrl, { Location: url })\n res.write(url)\n res.end()\n return res\n}\n\nexport function checkIsOnDemandRevalidate(\n req: Request | IncomingMessage | BaseNextRequest,\n previewProps: __ApiPreviewProps\n): {\n isOnDemandRevalidate: boolean\n revalidateOnlyGenerated: boolean\n} {\n const headers = HeadersAdapter.from(req.headers)\n\n const previewModeId = headers.get(PRERENDER_REVALIDATE_HEADER)\n const isOnDemandRevalidate = previewModeId === previewProps.previewModeId\n\n const revalidateOnlyGenerated = headers.has(\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER\n )\n\n return { isOnDemandRevalidate, revalidateOnlyGenerated }\n}\n\nexport const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`\nexport const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`\n\nexport const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024\n\nexport const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA)\nexport const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS)\n\nexport function clearPreviewData<T>(\n res: NextApiResponse<T>,\n options: {\n path?: string\n } = {}\n): NextApiResponse<T> {\n if (SYMBOL_CLEARED_COOKIES in res) {\n return res\n }\n\n const { serialize } =\n require('next/dist/compiled/cookie') as typeof import('cookie')\n const previous = res.getHeader('Set-Cookie')\n res.setHeader(`Set-Cookie`, [\n ...(typeof previous === 'string'\n ? [previous]\n : Array.isArray(previous)\n ? previous\n : []),\n serialize(COOKIE_NAME_PRERENDER_BYPASS, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n serialize(COOKIE_NAME_PRERENDER_DATA, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n ])\n\n Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, {\n value: true,\n enumerable: false,\n })\n return res\n}\n\n/**\n * Custom error class\n */\nexport class ApiError extends Error {\n readonly statusCode: number\n\n constructor(statusCode: number, message: string) {\n super(message)\n this.statusCode = statusCode\n }\n}\n\n/**\n * Sends error in `response`\n * @param res response object\n * @param statusCode of response\n * @param message of response\n */\nexport function sendError(\n res: NextApiResponse,\n statusCode: number,\n message: string\n): void {\n res.statusCode = statusCode\n res.statusMessage = message\n res.end(message)\n}\n\ninterface LazyProps {\n req: IncomingMessage\n}\n\n/**\n * Execute getter function only if its needed\n * @param LazyProps `req` and `params` for lazyProp\n * @param prop name of property\n * @param getter function to get data\n */\nexport function setLazyProp<T>(\n { req }: LazyProps,\n prop: string,\n getter: () => T\n): void {\n const opts = { configurable: true, enumerable: true }\n const optsReset = { ...opts, writable: true }\n\n Object.defineProperty(req, prop, {\n ...opts,\n get: () => {\n const value = getter()\n // we set the property on the object to avoid recalculating it\n Object.defineProperty(req, prop, { ...optsReset, value })\n return value\n },\n set: (value) => {\n Object.defineProperty(req, prop, { ...optsReset, value })\n },\n })\n}\n","import type { IncomingMessage } from 'http'\nimport type { ReadonlyRequestCookies } from '../web/spec-extension/adapters/request-cookies'\nimport type { ResponseCookies } from '../web/spec-extension/cookies'\nimport type { BaseNextRequest } from '../base-http'\nimport type { NextRequest } from '../web/spec-extension/request'\n\nimport {\n COOKIE_NAME_PRERENDER_BYPASS,\n checkIsOnDemandRevalidate,\n} from '../api-utils'\nimport type { __ApiPreviewProps } from '../api-utils'\n\nexport class DraftModeProvider {\n public readonly isEnabled: boolean\n\n /**\n * @internal - this declaration is stripped via `tsc --stripInternal`\n */\n private readonly _previewModeId: string | undefined\n\n /**\n * @internal - this declaration is stripped via `tsc --stripInternal`\n */\n private readonly _mutableCookies: ResponseCookies\n\n constructor(\n previewProps: __ApiPreviewProps | undefined,\n req: IncomingMessage | BaseNextRequest<unknown> | NextRequest,\n cookies: ReadonlyRequestCookies,\n mutableCookies: ResponseCookies\n ) {\n // The logic for draftMode() is very similar to tryGetPreviewData()\n // but Draft Mode does not have any data associated with it.\n const isOnDemandRevalidate =\n previewProps &&\n checkIsOnDemandRevalidate(req, previewProps).isOnDemandRevalidate\n\n const cookieValue = cookies.get(COOKIE_NAME_PRERENDER_BYPASS)?.value\n\n this.isEnabled = Boolean(\n !isOnDemandRevalidate &&\n cookieValue &&\n previewProps &&\n (cookieValue === previewProps.previewModeId ||\n // In dev mode, the cookie can be actual hash value preview id but the preview props can still be `development-id`.\n (process.env.NODE_ENV !== 'production' &&\n previewProps.previewModeId === 'development-id'))\n )\n\n this._previewModeId = previewProps?.previewModeId\n this._mutableCookies = mutableCookies\n }\n\n enable() {\n if (!this._previewModeId) {\n throw new Error(\n 'Invariant: previewProps missing previewModeId this should never happen'\n )\n }\n\n this._mutableCookies.set({\n name: COOKIE_NAME_PRERENDER_BYPASS,\n value: this._previewModeId,\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n })\n }\n\n disable() {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n this._mutableCookies.set({\n name: COOKIE_NAME_PRERENDER_BYPASS,\n value: '',\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n expires: new Date(0),\n })\n }\n}\n","import type { BaseNextRequest, BaseNextResponse } from '../base-http'\nimport type { IncomingHttpHeaders } from 'http'\nimport type { RequestStore } from '../app-render/work-unit-async-storage.external'\nimport type { RenderOpts } from '../app-render/types'\nimport type { NextRequest } from '../web/spec-extension/request'\nimport type { __ApiPreviewProps } from '../api-utils'\n\nimport { FLIGHT_HEADERS } from '../../client/components/app-router-headers'\nimport {\n HeadersAdapter,\n type ReadonlyHeaders,\n} from '../web/spec-extension/adapters/headers'\nimport {\n MutableRequestCookiesAdapter,\n RequestCookiesAdapter,\n responseCookiesToRequestCookies,\n wrapWithMutableAccessCheck,\n type ReadonlyRequestCookies,\n} from '../web/spec-extension/adapters/request-cookies'\nimport { ResponseCookies, RequestCookies } from '../web/spec-extension/cookies'\nimport { DraftModeProvider } from './draft-mode-provider'\nimport { splitCookiesString } from '../web/utils'\nimport type { ServerComponentsHmrCache } from '../response-cache'\nimport type { RenderResumeDataCache } from '../resume-data-cache/resume-data-cache'\n\nfunction getHeaders(headers: Headers | IncomingHttpHeaders): ReadonlyHeaders {\n const cleaned = HeadersAdapter.from(headers)\n for (const header of FLIGHT_HEADERS) {\n cleaned.delete(header.toLowerCase())\n }\n\n return HeadersAdapter.seal(cleaned)\n}\n\nfunction getMutableCookies(\n headers: Headers | IncomingHttpHeaders,\n onUpdateCookies?: (cookies: string[]) => void\n): ResponseCookies {\n const cookies = new RequestCookies(HeadersAdapter.from(headers))\n return MutableRequestCookiesAdapter.wrap(cookies, onUpdateCookies)\n}\n\nexport type WrapperRenderOpts = Partial<Pick<RenderOpts, 'onUpdateCookies'>> & {\n previewProps?: __ApiPreviewProps\n}\n\ntype RequestContext = RequestResponsePair & {\n /**\n * The URL of the request. This only specifies the pathname and the search\n * part of the URL. This is only undefined when generating static paths (ie,\n * there is no request in progress, nor do we know one).\n */\n url: {\n /**\n * The pathname of the requested URL.\n */\n pathname: string\n\n /**\n * The search part of the requested URL. If the request did not provide a\n * search part, this will be an empty string.\n */\n search?: string\n }\n phase: RequestStore['phase']\n renderOpts?: WrapperRenderOpts\n isHmrRefresh?: boolean\n serverComponentsHmrCache?: ServerComponentsHmrCache\n implicitTags?: string[] | undefined\n}\n\ntype RequestResponsePair =\n | { req: BaseNextRequest; res: BaseNextResponse } // for an app page\n | { req: NextRequest; res: undefined } // in an api route or middleware\n\n/**\n * If middleware set cookies in this request (indicated by `x-middleware-set-cookie`),\n * then merge those into the existing cookie object, so that when `cookies()` is accessed\n * it's able to read the newly set cookies.\n */\nfunction mergeMiddlewareCookies(\n req: RequestContext['req'],\n existingCookies: RequestCookies | ResponseCookies\n) {\n if (\n 'x-middleware-set-cookie' in req.headers &&\n typeof req.headers['x-middleware-set-cookie'] === 'string'\n ) {\n const setCookieValue = req.headers['x-middleware-set-cookie']\n const responseHeaders = new Headers()\n\n for (const cookie of splitCookiesString(setCookieValue)) {\n responseHeaders.append('set-cookie', cookie)\n }\n\n const responseCookies = new ResponseCookies(responseHeaders)\n\n // Transfer cookies from ResponseCookies to RequestCookies\n for (const cookie of responseCookies.getAll()) {\n existingCookies.set(cookie)\n }\n }\n}\n\nexport function createRequestStoreForRender(\n req: RequestContext['req'],\n res: RequestContext['res'],\n url: RequestContext['url'],\n implicitTags: RequestContext['implicitTags'],\n onUpdateCookies: RenderOpts['onUpdateCookies'],\n previewProps: WrapperRenderOpts['previewProps'],\n isHmrRefresh: RequestContext['isHmrRefresh'],\n serverComponentsHmrCache: RequestContext['serverComponentsHmrCache'],\n renderResumeDataCache: RenderResumeDataCache | undefined\n): RequestStore {\n return createRequestStoreImpl(\n // Pages start in render phase by default\n 'render',\n req,\n res,\n url,\n implicitTags,\n onUpdateCookies,\n renderResumeDataCache,\n previewProps,\n isHmrRefresh,\n serverComponentsHmrCache\n )\n}\n\nexport function createRequestStoreForAPI(\n req: RequestContext['req'],\n url: RequestContext['url'],\n implicitTags: RequestContext['implicitTags'],\n onUpdateCookies: RenderOpts['onUpdateCookies'],\n previewProps: WrapperRenderOpts['previewProps']\n): RequestStore {\n return createRequestStoreImpl(\n // API routes start in action phase by default\n 'action',\n req,\n undefined,\n url,\n implicitTags,\n onUpdateCookies,\n undefined,\n previewProps,\n false,\n undefined\n )\n}\n\nfunction createRequestStoreImpl(\n phase: RequestStore['phase'],\n req: RequestContext['req'],\n res: RequestContext['res'],\n url: RequestContext['url'],\n implicitTags: RequestContext['implicitTags'],\n onUpdateCookies: RenderOpts['onUpdateCookies'],\n renderResumeDataCache: RenderResumeDataCache | undefined,\n previewProps: WrapperRenderOpts['previewProps'],\n isHmrRefresh: RequestContext['isHmrRefresh'],\n serverComponentsHmrCache: RequestContext['serverComponentsHmrCache']\n): RequestStore {\n function defaultOnUpdateCookies(cookies: string[]) {\n if (res) {\n res.setHeader('Set-Cookie', cookies)\n }\n }\n\n const cache: {\n headers?: ReadonlyHeaders\n cookies?: ReadonlyRequestCookies\n mutableCookies?: ResponseCookies\n userspaceMutableCookies?: ResponseCookies\n draftMode?: DraftModeProvider\n } = {}\n\n return {\n type: 'request',\n phase,\n implicitTags: implicitTags ?? [],\n // Rather than just using the whole `url` here, we pull the parts we want\n // to ensure we don't use parts of the URL that we shouldn't. This also\n // lets us avoid requiring an empty string for `search` in the type.\n url: { pathname: url.pathname, search: url.search ?? '' },\n get headers() {\n if (!cache.headers) {\n // Seal the headers object that'll freeze out any methods that could\n // mutate the underlying data.\n cache.headers = getHeaders(req.headers)\n }\n\n return cache.headers\n },\n get cookies() {\n if (!cache.cookies) {\n // if middleware is setting cookie(s), then include those in\n // the initial cached cookies so they can be read in render\n const requestCookies = new RequestCookies(\n HeadersAdapter.from(req.headers)\n )\n\n mergeMiddlewareCookies(req, requestCookies)\n\n // Seal the cookies object that'll freeze out any methods that could\n // mutate the underlying data.\n cache.cookies = RequestCookiesAdapter.seal(requestCookies)\n }\n\n return cache.cookies\n },\n set cookies(value: ReadonlyRequestCookies) {\n cache.cookies = value\n },\n get mutableCookies() {\n if (!cache.mutableCookies) {\n const mutableCookies = getMutableCookies(\n req.headers,\n onUpdateCookies || (res ? defaultOnUpdateCookies : undefined)\n )\n\n mergeMiddlewareCookies(req, mutableCookies)\n\n cache.mutableCookies = mutableCookies\n }\n return cache.mutableCookies\n },\n get userspaceMutableCookies() {\n if (!cache.userspaceMutableCookies) {\n const userspaceMutableCookies = wrapWithMutableAccessCheck(\n this.mutableCookies\n )\n cache.userspaceMutableCookies = userspaceMutableCookies\n }\n return cache.userspaceMutableCookies\n },\n get draftMode() {\n if (!cache.draftMode) {\n cache.draftMode = new DraftModeProvider(\n previewProps,\n req,\n this.cookies,\n this.mutableCookies\n )\n }\n\n return cache.draftMode\n },\n renderResumeDataCache: renderResumeDataCache ?? null,\n isHmrRefresh,\n serverComponentsHmrCache:\n serverComponentsHmrCache ||\n (globalThis as any).__serverComponentsHmrCache,\n }\n}\n\nexport function synchronizeMutableCookies(store: RequestStore) {\n // TODO: does this need to update headers as well?\n store.cookies = RequestCookiesAdapter.seal(\n responseCookiesToRequestCookies(store.mutableCookies)\n )\n}\n","import type { OutgoingHttpHeaders } from 'http'\nimport {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../lib/constants'\n\n/**\n * Converts a Node.js IncomingHttpHeaders object to a Headers object. Any\n * headers with multiple values will be joined with a comma and space. Any\n * headers that have an undefined value will be ignored and others will be\n * coerced to strings.\n *\n * @param nodeHeaders the headers object to convert\n * @returns the converted headers object\n */\nexport function fromNodeOutgoingHttpHeaders(\n nodeHeaders: OutgoingHttpHeaders\n): Headers {\n const headers = new Headers()\n for (let [key, value] of Object.entries(nodeHeaders)) {\n const values = Array.isArray(value) ? value : [value]\n for (let v of values) {\n if (typeof v === 'undefined') continue\n if (typeof v === 'number') {\n v = v.toString()\n }\n\n headers.append(key, v)\n }\n }\n return headers\n}\n\n/*\n Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n that are within a single set-cookie field-value, such as in the Expires portion.\n This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n React Native's fetch does this for *every* header, including set-cookie.\n \n Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nexport function splitCookiesString(cookiesString: string) {\n var cookiesStrings = []\n var pos = 0\n var start\n var ch\n var lastComma\n var nextStart\n var cookiesSeparatorFound\n\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1\n }\n return pos < cookiesString.length\n }\n\n function notSpecialChar() {\n ch = cookiesString.charAt(pos)\n\n return ch !== '=' && ch !== ';' && ch !== ','\n }\n\n while (pos < cookiesString.length) {\n start = pos\n cookiesSeparatorFound = false\n\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos)\n if (ch === ',') {\n // ',' is a cookie separator if we have later first '=', not ';' or ','\n lastComma = pos\n pos += 1\n\n skipWhitespace()\n nextStart = pos\n\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1\n }\n\n // currently special character\n if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') {\n // we found cookies separator\n cookiesSeparatorFound = true\n // pos is inside the next cookie, so back up and return it.\n pos = nextStart\n cookiesStrings.push(cookiesString.substring(start, lastComma))\n start = pos\n } else {\n // in param ',' or param separator ';',\n // we continue from that comma\n pos = lastComma + 1\n }\n } else {\n pos += 1\n }\n }\n\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length))\n }\n }\n\n return cookiesStrings\n}\n\n/**\n * Converts a Headers object to a Node.js OutgoingHttpHeaders object. This is\n * required to support the set-cookie header, which may have multiple values.\n *\n * @param headers the headers object to convert\n * @returns the converted headers object\n */\nexport function toNodeOutgoingHttpHeaders(\n headers: Headers\n): OutgoingHttpHeaders {\n const nodeHeaders: OutgoingHttpHeaders = {}\n const cookies: string[] = []\n if (headers) {\n for (const [key, value] of headers.entries()) {\n if (key.toLowerCase() === 'set-cookie') {\n // We may have gotten a comma joined string of cookies, or multiple\n // set-cookie headers. We need to merge them into one header array\n // to represent all the cookies.\n cookies.push(...splitCookiesString(value))\n nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies\n } else {\n nodeHeaders[key] = value\n }\n }\n }\n return nodeHeaders\n}\n\n/**\n * Validate the correctness of a user-provided URL.\n */\nexport function validateURL(url: string | URL): string {\n try {\n return String(new URL(String(url)))\n } catch (error: any) {\n throw new Error(\n `URL is malformed \"${String(\n url\n )}\". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`,\n { cause: error }\n )\n }\n}\n\n/**\n * Normalizes `nxtP` and `nxtI` query param values to remove the prefix.\n * This function does not mutate the input key.\n */\nexport function normalizeNextQueryParam(key: string): null | string {\n const prefixes = [NEXT_QUERY_PARAM_PREFIX, NEXT_INTERCEPTION_MARKER_PREFIX]\n for (const prefix of prefixes) {\n if (key !== prefix && key.startsWith(prefix)) {\n return key.substring(prefix.length)\n }\n }\n return null\n}\n","export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n","import type { WorkStore } from '../app-render/work-async-storage.external'\n\n/** Run a callback, and execute any *new* revalidations added during its runtime. */\nexport async function withExecuteRevalidates<T>(\n store: WorkStore | undefined,\n callback: () => Promise<T>\n): Promise<T> {\n if (!store) {\n return callback()\n }\n // If we executed any revalidates during the request, then we don't want to execute them again.\n // save the state so we can check if anything changed after we're done running callbacks.\n const savedRevalidationState = cloneRevalidationState(store)\n try {\n return await callback()\n } finally {\n // Check if we have any new revalidates, and if so, wait until they are all resolved.\n const newRevalidates = diffRevalidationState(\n savedRevalidationState,\n cloneRevalidationState(store)\n )\n await executeRevalidates(store, newRevalidates)\n }\n}\n\ntype RevalidationState = Required<\n Pick<\n WorkStore,\n 'revalidatedTags' | 'pendingRevalidates' | 'pendingRevalidateWrites'\n >\n>\n\nfunction cloneRevalidationState(store: WorkStore): RevalidationState {\n return {\n revalidatedTags: store.revalidatedTags ? [...store.revalidatedTags] : [],\n pendingRevalidates: { ...store.pendingRevalidates },\n pendingRevalidateWrites: store.pendingRevalidateWrites\n ? [...store.pendingRevalidateWrites]\n : [],\n }\n}\n\nfunction diffRevalidationState(\n prev: RevalidationState,\n curr: RevalidationState\n): RevalidationState {\n const prevTags = new Set(prev.revalidatedTags)\n const prevRevalidateWrites = new Set(prev.pendingRevalidateWrites)\n return {\n revalidatedTags: curr.revalidatedTags.filter((tag) => !prevTags.has(tag)),\n pendingRevalidates: Object.fromEntries(\n Object.entries(curr.pendingRevalidates).filter(\n ([key]) => !(key in prev.pendingRevalidates)\n )\n ),\n pendingRevalidateWrites: curr.pendingRevalidateWrites.filter(\n (promise) => !prevRevalidateWrites.has(promise)\n ),\n }\n}\n\nasync function executeRevalidates(\n workStore: WorkStore,\n {\n revalidatedTags,\n pendingRevalidates,\n pendingRevalidateWrites,\n }: RevalidationState\n) {\n return Promise.all([\n workStore.incrementalCache?.revalidateTag(revalidatedTags),\n ...Object.values(pendingRevalidates),\n ...pendingRevalidateWrites,\n ])\n}\n","import type { AsyncLocalStorage } from 'async_hooks'\n\nconst sharedAsyncLocalStorageNotAvailableError = new Error(\n 'Invariant: AsyncLocalStorage accessed in runtime where it is not available'\n)\n\nclass FakeAsyncLocalStorage<Store extends {}>\n implements AsyncLocalStorage<Store>\n{\n disable(): void {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n getStore(): Store | undefined {\n // This fake implementation of AsyncLocalStorage always returns `undefined`.\n return undefined\n }\n\n run<R>(): R {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n exit<R>(): R {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n enterWith(): void {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n static bind<T>(fn: T): T {\n return fn\n }\n}\n\nconst maybeGlobalAsyncLocalStorage =\n typeof globalThis !== 'undefined' && (globalThis as any).AsyncLocalStorage\n\nexport function createAsyncLocalStorage<\n Store extends {},\n>(): AsyncLocalStorage<Store> {\n if (maybeGlobalAsyncLocalStorage) {\n return new maybeGlobalAsyncLocalStorage()\n }\n return new FakeAsyncLocalStorage()\n}\n\nexport function bindSnapshot<T>(fn: T): T {\n if (maybeGlobalAsyncLocalStorage) {\n return maybeGlobalAsyncLocalStorage.bind(fn)\n }\n return FakeAsyncLocalStorage.bind(fn)\n}\n\nexport function createSnapshot(): <R, TArgs extends any[]>(\n fn: (...args: TArgs) => R,\n ...args: TArgs\n) => R {\n if (maybeGlobalAsyncLocalStorage) {\n return maybeGlobalAsyncLocalStorage.snapshot()\n }\n return function (fn: any, ...args: any[]) {\n return fn(...args)\n }\n}\n","import PromiseQueue from 'next/dist/compiled/p-queue'\nimport type { RequestLifecycleOpts } from '../base-server'\nimport type { AfterCallback, AfterTask } from './after'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { isThenable } from '../../shared/lib/is-thenable'\nimport { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport { withExecuteRevalidates } from './revalidation-utils'\nimport { bindSnapshot } from '../app-render/async-local-storage'\nimport {\n workUnitAsyncStorage,\n type WorkUnitStore,\n} from '../app-render/work-unit-async-storage.external'\nimport { afterTaskAsyncStorage } from '../app-render/after-task-async-storage.external'\n\nexport type AfterContextOpts = {\n waitUntil: RequestLifecycleOpts['waitUntil'] | undefined\n onClose: RequestLifecycleOpts['onClose']\n onTaskError: RequestLifecycleOpts['onAfterTaskError'] | undefined\n}\n\nexport class AfterContext {\n private waitUntil: RequestLifecycleOpts['waitUntil'] | undefined\n private onClose: RequestLifecycleOpts['onClose']\n private onTaskError: RequestLifecycleOpts['onAfterTaskError'] | undefined\n\n private runCallbacksOnClosePromise: Promise<void> | undefined\n private callbackQueue: PromiseQueue\n private workUnitStores = new Set<WorkUnitStore>()\n\n constructor({ waitUntil, onClose, onTaskError }: AfterContextOpts) {\n this.waitUntil = waitUntil\n this.onClose = onClose\n this.onTaskError = onTaskError\n\n this.callbackQueue = new PromiseQueue()\n this.callbackQueue.pause()\n }\n\n public after(task: AfterTask): void {\n if (isThenable(task)) {\n if (!this.waitUntil) {\n errorWaitUntilNotAvailable()\n }\n this.waitUntil(\n task.catch((error) => this.reportTaskError('promise', error))\n )\n } else if (typeof task === 'function') {\n // TODO(after): implement tracing\n this.addCallback(task)\n } else {\n throw new Error('`after()`: Argument must be a promise or a function')\n }\n }\n\n private addCallback(callback: AfterCallback) {\n // if something is wrong, throw synchronously, bubbling up to the `after` callsite.\n if (!this.waitUntil) {\n errorWaitUntilNotAvailable()\n }\n\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n this.workUnitStores.add(workUnitStore)\n }\n\n const afterTaskStore = afterTaskAsyncStorage.getStore()\n\n // This is used for checking if request APIs can be called inside `after`.\n // Note that we need to check the phase in which the *topmost* `after` was called (which should be \"action\"),\n // not the current phase (which might be \"after\" if we're in a nested after).\n // Otherwise, we might allow `after(() => headers())`, but not `after(() => after(() => headers()))`.\n const rootTaskSpawnPhase = afterTaskStore\n ? afterTaskStore.rootTaskSpawnPhase // nested after\n : workUnitStore?.phase // topmost after\n\n // this should only happen once.\n if (!this.runCallbacksOnClosePromise) {\n this.runCallbacksOnClosePromise = this.runCallbacksOnClose()\n this.waitUntil(this.runCallbacksOnClosePromise)\n }\n\n // Bind the callback to the current execution context (i.e. preserve all currently available ALS-es).\n // We do this because we want all of these to be equivalent in every regard except timing:\n // after(() => x())\n // after(x())\n // await x()\n const wrappedCallback = bindSnapshot(async () => {\n try {\n await afterTaskAsyncStorage.run({ rootTaskSpawnPhase }, () =>\n callback()\n )\n } catch (error) {\n this.reportTaskError('function', error)\n }\n })\n\n this.callbackQueue.add(wrappedCallback)\n }\n\n private async runCallbacksOnClose() {\n await new Promise<void>((resolve) => this.onClose!(resolve))\n return this.runCallbacks()\n }\n\n private async runCallbacks(): Promise<void> {\n if (this.callbackQueue.size === 0) return\n\n for (const workUnitStore of this.workUnitStores) {\n workUnitStore.phase = 'after'\n }\n\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError('Missing workStore in AfterContext.runCallbacks')\n }\n\n return withExecuteRevalidates(workStore, () => {\n this.callbackQueue.start()\n return this.callbackQueue.onIdle()\n })\n }\n\n private reportTaskError(taskKind: 'promise' | 'function', error: unknown) {\n // TODO(after): this is fine for now, but will need better intergration with our error reporting.\n // TODO(after): should we log this if we have a onTaskError callback?\n console.error(\n taskKind === 'promise'\n ? `A promise passed to \\`after()\\` rejected:`\n : `An error occurred in a function passed to \\`after()\\`:`,\n error\n )\n if (this.onTaskError) {\n // this is very defensive, but we really don't want anything to blow up in an error handler\n try {\n this.onTaskError?.(error)\n } catch (handlerError) {\n console.error(\n new InvariantError(\n '`onTaskError` threw while handling an error thrown from an `after` task',\n {\n cause: handlerError,\n }\n )\n )\n }\n }\n }\n}\n\nfunction errorWaitUntilNotAvailable(): never {\n throw new Error(\n '`after()` will not work correctly, because `waitUntil` is not available in the current environment.'\n )\n}\n","/**\n * Check to see if a value is Thenable.\n *\n * @param promise the maybe-thenable value\n * @returns true if the value is thenable\n */\nexport function isThenable<T = unknown>(\n promise: Promise<T> | T\n): promise is Promise<T> {\n return (\n promise !== null &&\n typeof promise === 'object' &&\n 'then' in promise &&\n typeof promise.then === 'function'\n )\n}\n","import type { Segment } from '../../server/app-render/types'\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function addSearchParamsIfPageSegment(\n segment: Segment,\n searchParams: Record<string, string | string[] | undefined>\n) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY)\n\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams)\n return stringifiedQuery !== '{}'\n ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery\n : PAGE_SEGMENT_KEY\n }\n\n return segment\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\n","/**\n * List of valid HTTP methods that can be implemented by Next.js's Custom App\n * Routes.\n */\nexport const HTTP_METHODS = [\n 'GET',\n 'HEAD',\n 'OPTIONS',\n 'POST',\n 'PUT',\n 'DELETE',\n 'PATCH',\n] as const\n\n/**\n * A type representing the valid HTTP methods that can be implemented by\n * Next.js's Custom App Routes.\n */\nexport type HTTP_METHOD = (typeof HTTP_METHODS)[number]\n\n/**\n * Checks to see if the passed string is an HTTP method. Note that this is case\n * sensitive.\n *\n * @param maybeMethod the string that may be an HTTP method\n * @returns true if the string is an HTTP method\n */\nexport function isHTTPMethod(maybeMethod: string): maybeMethod is HTTP_METHOD {\n return HTTP_METHODS.includes(maybeMethod as HTTP_METHOD)\n}\n","import { NEXT_CACHE_IMPLICIT_TAG_ID } from '../../lib/constants'\nimport type { FallbackRouteParams } from '../request/fallback-params'\n\nconst getDerivedTags = (pathname: string): string[] => {\n const derivedTags: string[] = [`/layout`]\n\n // we automatically add the current path segments as tags\n // for revalidatePath handling\n if (pathname.startsWith('/')) {\n const pathnameParts = pathname.split('/')\n\n for (let i = 1; i < pathnameParts.length + 1; i++) {\n let curPathname = pathnameParts.slice(0, i).join('/')\n\n if (curPathname) {\n // all derived tags other than the page are layout tags\n if (!curPathname.endsWith('/page') && !curPathname.endsWith('/route')) {\n curPathname = `${curPathname}${\n !curPathname.endsWith('/') ? '/' : ''\n }layout`\n }\n derivedTags.push(curPathname)\n }\n }\n }\n return derivedTags\n}\n\nexport function getImplicitTags(\n page: string,\n url: {\n pathname: string\n search?: string\n },\n fallbackRouteParams: null | FallbackRouteParams\n) {\n // TODO: Cache the result\n const newTags: string[] = []\n const hasFallbackRouteParams =\n fallbackRouteParams && fallbackRouteParams.size > 0\n\n // Add the derived tags from the page.\n const derivedTags = getDerivedTags(page)\n for (let tag of derivedTags) {\n tag = `${NEXT_CACHE_IMPLICIT_TAG_ID}${tag}`\n newTags.push(tag)\n }\n\n // Add the tags from the pathname. If the route has unknown params, we don't\n // want to add the pathname as a tag, as it will be invalid.\n if (url.pathname && !hasFallbackRouteParams) {\n const tag = `${NEXT_CACHE_IMPLICIT_TAG_ID}${url.pathname}`\n newTags.push(tag)\n }\n\n return newTags\n}\n","const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE'\n\nexport class DynamicServerError extends Error {\n digest: typeof DYNAMIC_ERROR_CODE = DYNAMIC_ERROR_CODE\n\n constructor(public readonly description: string) {\n super(`Dynamic server usage: ${description}`)\n }\n}\n\nexport function isDynamicServerError(err: unknown): err is DynamicServerError {\n if (\n typeof err !== 'object' ||\n err === null ||\n !('digest' in err) ||\n typeof err.digest !== 'string'\n ) {\n return false\n }\n\n return err.digest === DYNAMIC_ERROR_CODE\n}\n","const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT'\n\nexport class StaticGenBailoutError extends Error {\n public readonly code = NEXT_STATIC_GEN_BAILOUT\n}\n\nexport function isStaticGenBailoutError(\n error: unknown\n): error is StaticGenBailoutError {\n if (typeof error !== 'object' || error === null || !('code' in error)) {\n return false\n }\n\n return error.code === NEXT_STATIC_GEN_BAILOUT\n}\n","export function isHangingPromiseRejectionError(\n err: unknown\n): err is HangingPromiseRejectionError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === HANGING_PROMISE_REJECTION\n}\n\nconst HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'\n\nclass HangingPromiseRejectionError extends Error {\n public readonly digest = HANGING_PROMISE_REJECTION\n\n constructor(public readonly expression: string) {\n super(\n `During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \\`setTimeout\\`, \\`after\\`, or similar functions you may observe this error and you should handle it in that context.`\n )\n }\n}\n\n/**\n * This function constructs a promise that will never resolve. This is primarily\n * useful for dynamicIO where we use promise resolution timing to determine which\n * parts of a render can be included in a prerender.\n *\n * @internal\n */\nexport function makeHangingPromise<T>(\n signal: AbortSignal,\n expression: string\n): Promise<T> {\n const hangingPromise = new Promise<T>((_, reject) => {\n signal.addEventListener(\n 'abort',\n () => {\n reject(new HangingPromiseRejectionError(expression))\n },\n { once: true }\n )\n })\n // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so\n // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct\n // your own promise out of it you'll need to ensure you handle the error when it rejects.\n hangingPromise.catch(ignoreReject)\n return hangingPromise\n}\n\nfunction ignoreReject() {}\n","export type ScheduledFn<T = void> = () => T | PromiseLike<T>\nexport type SchedulerFn<T = void> = (cb: ScheduledFn<T>) => void\n\n/**\n * Schedules a function to be called on the next tick after the other promises\n * have been resolved.\n *\n * @param cb the function to schedule\n */\nexport const scheduleOnNextTick = <T = void>(cb: ScheduledFn<T>): void => {\n // We use Promise.resolve().then() here so that the operation is scheduled at\n // the end of the promise job queue, we then add it to the next process tick\n // to ensure it's evaluated afterwards.\n //\n // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255\n //\n Promise.resolve().then(() => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n process.nextTick(cb)\n }\n })\n}\n\n/**\n * Schedules a function to be called using `setImmediate` or `setTimeout` if\n * `setImmediate` is not available (like in the Edge runtime).\n *\n * @param cb the function to schedule\n */\nexport const scheduleImmediate = <T = void>(cb: ScheduledFn<T>): void => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n setImmediate(cb)\n }\n}\n\n/**\n * returns a promise than resolves in a future task. There is no guarantee that the task it resolves in\n * will be the next task but if you await it you can at least be sure that the current task is over and\n * most usefully that the entire microtask queue of the current task has been emptied.\n */\nexport function atLeastOneTask() {\n return new Promise<void>((resolve) => scheduleImmediate(resolve))\n}\n\n/**\n * This utility function is extracted to make it easier to find places where we are doing\n * specific timing tricks to try to schedule work after React has rendered. This is especially\n * important at the moment because Next.js uses the edge builds of React which use setTimeout to\n * schedule work when you might expect that something like setImmediate would do the trick.\n *\n * Long term we should switch to the node versions of React rendering when possible and then\n * update this to use setImmediate rather than setTimeout\n */\nexport function waitAtLeastOneReactRenderTask(): Promise<void> {\n if (process.env.NEXT_RUNTIME === 'edge') {\n return new Promise((r) => setTimeout(r, 0))\n } else {\n return new Promise((r) => setImmediate(r))\n }\n}\n","/**\n * The functions provided by this module are used to communicate certain properties\n * about the currently running code so that Next.js can make decisions on how to handle\n * the current execution in different rendering modes such as pre-rendering, resuming, and SSR.\n *\n * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering.\n * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts\n * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of\n * Dynamic indications.\n *\n * The first is simply an intention to be dynamic. unstable_noStore is an example of this where\n * the currently executing code simply declares that the current scope is dynamic but if you use it\n * inside unstable_cache it can still be cached. This type of indication can be removed if we ever\n * make the default dynamic to begin with because the only way you would ever be static is inside\n * a cache scope which this indication does not affect.\n *\n * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic\n * because it means that it is inappropriate to cache this at all. using a dynamic data source inside\n * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should\n * read that data outside the cache and pass it in as an argument to the cached function.\n */\n\nimport type { WorkStore } from '../app-render/work-async-storage.external'\nimport type {\n WorkUnitStore,\n RequestStore,\n PrerenderStoreLegacy,\n PrerenderStoreModern,\n} from '../app-render/work-unit-async-storage.external'\n\n// Once postpone is in stable we should switch to importing the postpone export directly\nimport React from 'react'\n\nimport { DynamicServerError } from '../../client/components/hooks-server-context'\nimport { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport { workUnitAsyncStorage } from './work-unit-async-storage.external'\nimport { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport { makeHangingPromise } from '../dynamic-rendering-utils'\nimport {\n METADATA_BOUNDARY_NAME,\n VIEWPORT_BOUNDARY_NAME,\n OUTLET_BOUNDARY_NAME,\n} from '../../lib/metadata/metadata-constants'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\n\nconst hasPostpone = typeof React.unstable_postpone === 'function'\n\nexport type DynamicAccess = {\n /**\n * If debugging, this will contain the stack trace of where the dynamic access\n * occurred. This is used to provide more information to the user about why\n * their page is being rendered dynamically.\n */\n stack?: string\n\n /**\n * The expression that was accessed dynamically.\n */\n expression: string\n}\n\n// Stores dynamic reasons used during an RSC render.\nexport type DynamicTrackingState = {\n /**\n * When true, stack information will also be tracked during dynamic access.\n */\n readonly isDebugDynamicAccesses: boolean | undefined\n\n /**\n * The dynamic accesses that occurred during the render.\n */\n readonly dynamicAccesses: Array<DynamicAccess>\n\n syncDynamicExpression: undefined | string\n syncDynamicErrorWithStack: null | Error\n // Dev only\n syncDynamicLogged?: boolean\n}\n\n// Stores dynamic reasons used during an SSR render.\nexport type DynamicValidationState = {\n hasSuspendedDynamic: boolean\n hasDynamicMetadata: boolean\n hasDynamicViewport: boolean\n hasSyncDynamicErrors: boolean\n dynamicErrors: Array<Error>\n}\n\nexport function createDynamicTrackingState(\n isDebugDynamicAccesses: boolean | undefined\n): DynamicTrackingState {\n return {\n isDebugDynamicAccesses,\n dynamicAccesses: [],\n syncDynamicExpression: undefined,\n syncDynamicErrorWithStack: null,\n }\n}\n\nexport function createDynamicValidationState(): DynamicValidationState {\n return {\n hasSuspendedDynamic: false,\n hasDynamicMetadata: false,\n hasDynamicViewport: false,\n hasSyncDynamicErrors: false,\n dynamicErrors: [],\n }\n}\n\nexport function getFirstDynamicReason(\n trackingState: DynamicTrackingState\n): undefined | string {\n return trackingState.dynamicAccesses[0]?.expression\n}\n\n/**\n * This function communicates that the current scope should be treated as dynamic.\n *\n * In most cases this function is a no-op but if called during\n * a PPR prerender it will postpone the current sub-tree and calling\n * it during a normal prerender will cause the entire prerender to abort\n */\nexport function markCurrentScopeAsDynamic(\n store: WorkStore,\n workUnitStore: undefined | Exclude<WorkUnitStore, PrerenderStoreModern>,\n expression: string\n): void {\n if (workUnitStore) {\n if (\n workUnitStore.type === 'cache' ||\n workUnitStore.type === 'unstable-cache'\n ) {\n // inside cache scopes marking a scope as dynamic has no effect because the outer cache scope\n // creates a cache boundary. This is subtly different from reading a dynamic data source which is\n // forbidden inside a cache scope.\n return\n }\n }\n\n // If we're forcing dynamic rendering or we're forcing static rendering, we\n // don't need to do anything here because the entire page is already dynamic\n // or it's static and it should not throw or postpone here.\n if (store.forceDynamic || store.forceStatic) return\n\n if (store.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${store.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n if (workUnitStore.type === 'prerender-ppr') {\n postponeWithTracking(\n store.route,\n expression,\n workUnitStore.dynamicTracking\n )\n } else if (workUnitStore.type === 'prerender-legacy') {\n workUnitStore.revalidate = 0\n\n // We aren't prerendering but we are generating a static page. We need to bail out of static generation\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n } else if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore &&\n workUnitStore.type === 'request'\n ) {\n workUnitStore.usedDynamic = true\n }\n }\n}\n\n/**\n * This function communicates that some dynamic path parameter was read. This\n * differs from the more general `trackDynamicDataAccessed` in that it is will\n * not error when `dynamic = \"error\"` is set.\n *\n * @param store The static generation store\n * @param expression The expression that was accessed dynamically\n */\nexport function trackFallbackParamAccessed(\n store: WorkStore,\n expression: string\n): void {\n const prerenderStore = workUnitAsyncStorage.getStore()\n if (!prerenderStore || prerenderStore.type !== 'prerender-ppr') return\n\n postponeWithTracking(store.route, expression, prerenderStore.dynamicTracking)\n}\n\n/**\n * This function is meant to be used when prerendering without dynamicIO or PPR.\n * When called during a build it will cause Next.js to consider the route as dynamic.\n *\n * @internal\n */\nexport function throwToInterruptStaticGeneration(\n expression: string,\n store: WorkStore,\n prerenderStore: PrerenderStoreLegacy\n): never {\n // We aren't prerendering but we are generating a static page. We need to bail out of static generation\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n\n prerenderStore.revalidate = 0\n\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n}\n\n/**\n * This function should be used to track whether something dynamic happened even when\n * we are in a dynamic render. This is useful for Dev where all renders are dynamic but\n * we still track whether dynamic APIs were accessed for helpful messaging\n *\n * @internal\n */\nexport function trackDynamicDataInDynamicRender(\n _store: WorkStore,\n workUnitStore: void | WorkUnitStore\n) {\n if (workUnitStore) {\n if (\n workUnitStore.type === 'cache' ||\n workUnitStore.type === 'unstable-cache'\n ) {\n // inside cache scopes marking a scope as dynamic has no effect because the outer cache scope\n // creates a cache boundary. This is subtly different from reading a dynamic data source which is\n // forbidden inside a cache scope.\n return\n }\n if (\n workUnitStore.type === 'prerender' ||\n workUnitStore.type === 'prerender-legacy'\n ) {\n workUnitStore.revalidate = 0\n }\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.type === 'request'\n ) {\n workUnitStore.usedDynamic = true\n }\n }\n}\n\n// Despite it's name we don't actually abort unless we have a controller to call abort on\n// There are times when we let a prerender run long to discover caches where we want the semantics\n// of tracking dynamic access without terminating the prerender early\nfunction abortOnSynchronousDynamicDataAccess(\n route: string,\n expression: string,\n prerenderStore: PrerenderStoreModern\n): void {\n const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n\n const error = createPrerenderInterruptedError(reason)\n\n prerenderStore.controller.abort(error)\n\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n // When we aren't debugging, we don't need to create another error for the\n // stack trace.\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nexport function abortOnSynchronousPlatformIOAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): void {\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n if (dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicExpression = expression\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n }\n }\n return abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n}\n\nexport function trackSynchronousPlatformIOAccessInDev(\n requestStore: RequestStore\n): void {\n // We don't actually have a controller to abort but we do the semantic equivalent by\n // advancing the request store out of prerender mode\n requestStore.prerenderPhase = false\n}\n\n/**\n * use this function when prerendering with dynamicIO. If we are doing a\n * prospective prerender we don't actually abort because we want to discover\n * all caches for the shell. If this is the actual prerender we do abort.\n *\n * This function accepts a prerenderStore but the caller should ensure we're\n * actually running in dynamicIO mode.\n *\n * @internal\n */\nexport function abortAndThrowOnSynchronousRequestDataAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): never {\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n if (dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicExpression = expression\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n if (prerenderStore.validating === true) {\n // We always log Request Access in dev at the point of calling the function\n // So we mark the dynamic validation as not requiring it to be printed\n dynamicTracking.syncDynamicLogged = true\n }\n }\n }\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n throw createPrerenderInterruptedError(\n `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n )\n}\n\n// For now these implementations are the same so we just reexport\nexport const trackSynchronousRequestDataAccessInDev =\n trackSynchronousPlatformIOAccessInDev\n\n/**\n * This component will call `React.postpone` that throws the postponed error.\n */\ntype PostponeProps = {\n reason: string\n route: string\n}\nexport function Postpone({ reason, route }: PostponeProps): never {\n const prerenderStore = workUnitAsyncStorage.getStore()\n const dynamicTracking =\n prerenderStore && prerenderStore.type === 'prerender-ppr'\n ? prerenderStore.dynamicTracking\n : null\n postponeWithTracking(route, reason, dynamicTracking)\n}\n\nexport function postponeWithTracking(\n route: string,\n expression: string,\n dynamicTracking: null | DynamicTrackingState\n): never {\n assertPostpone()\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n // When we aren't debugging, we don't need to create another error for the\n // stack trace.\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n\n React.unstable_postpone(createPostponeReason(route, expression))\n}\n\nfunction createPostponeReason(route: string, expression: string) {\n return (\n `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. ` +\n `React throws this special object to indicate where. It should not be caught by ` +\n `your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`\n )\n}\n\nexport function isDynamicPostpone(err: unknown) {\n if (\n typeof err === 'object' &&\n err !== null &&\n typeof (err as any).message === 'string'\n ) {\n return isDynamicPostponeReason((err as any).message)\n }\n return false\n}\n\nfunction isDynamicPostponeReason(reason: string) {\n return (\n reason.includes(\n 'needs to bail out of prerendering at this point because it used'\n ) &&\n reason.includes(\n 'Learn more: https://nextjs.org/docs/messages/ppr-caught-error'\n )\n )\n}\n\nif (isDynamicPostponeReason(createPostponeReason('%%%', '^^^')) === false) {\n throw new Error(\n 'Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js'\n )\n}\n\nconst NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'\n\nfunction createPrerenderInterruptedError(message: string): Error {\n const error = new Error(message)\n ;(error as any).digest = NEXT_PRERENDER_INTERRUPTED\n return error\n}\n\ntype DigestError = Error & {\n digest: string\n}\n\nexport function isPrerenderInterruptedError(\n error: unknown\n): error is DigestError {\n return (\n typeof error === 'object' &&\n error !== null &&\n (error as any).digest === NEXT_PRERENDER_INTERRUPTED &&\n 'name' in error &&\n 'message' in error &&\n error instanceof Error\n )\n}\n\nexport function accessedDynamicData(\n dynamicAccesses: Array<DynamicAccess>\n): boolean {\n return dynamicAccesses.length > 0\n}\n\nexport function consumeDynamicAccess(\n serverDynamic: DynamicTrackingState,\n clientDynamic: DynamicTrackingState\n): DynamicTrackingState['dynamicAccesses'] {\n // We mutate because we only call this once we are no longer writing\n // to the dynamicTrackingState and it's more efficient than creating a new\n // array.\n serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses)\n return serverDynamic.dynamicAccesses\n}\n\nexport function formatDynamicAPIAccesses(\n dynamicAccesses: Array<DynamicAccess>\n): string[] {\n return dynamicAccesses\n .filter(\n (access): access is Required<DynamicAccess> =>\n typeof access.stack === 'string' && access.stack.length > 0\n )\n .map(({ expression, stack }) => {\n stack = stack\n .split('\\n')\n // Remove the \"Error: \" prefix from the first line of the stack trace as\n // well as the first 4 lines of the stack trace which is the distance\n // from the user code and the `new Error().stack` call.\n .slice(4)\n .filter((line) => {\n // Exclude Next.js internals from the stack trace.\n if (line.includes('node_modules/next/')) {\n return false\n }\n\n // Exclude anonymous functions from the stack trace.\n if (line.includes(' (<anonymous>)')) {\n return false\n }\n\n // Exclude Node.js internals from the stack trace.\n if (line.includes(' (node:')) {\n return false\n }\n\n return true\n })\n .join('\\n')\n return `Dynamic API Usage Debug - ${expression}:\\n${stack}`\n })\n}\n\nfunction assertPostpone() {\n if (!hasPostpone) {\n throw new Error(\n `Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js`\n )\n }\n}\n\n/**\n * This is a bit of a hack to allow us to abort a render using a Postpone instance instead of an Error which changes React's\n * abort semantics slightly.\n */\nexport function createPostponedAbortSignal(reason: string): AbortSignal {\n assertPostpone()\n const controller = new AbortController()\n // We get our hands on a postpone instance by calling postpone and catching the throw\n try {\n React.unstable_postpone(reason)\n } catch (x: unknown) {\n controller.abort(x)\n }\n return controller.signal\n}\n\n/**\n * In a prerender, we may end up with hanging Promises as inputs due them\n * stalling on connection() or because they're loading dynamic data. In that\n * case we need to abort the encoding of arguments since they'll never complete.\n */\nexport function createHangingInputAbortSignal(\n workUnitStore: PrerenderStoreModern\n): AbortSignal {\n const controller = new AbortController()\n\n if (workUnitStore.cacheSignal) {\n // If we have a cacheSignal it means we're in a prospective render. If the input\n // we're waiting on is coming from another cache, we do want to wait for it so that\n // we can resolve this cache entry too.\n workUnitStore.cacheSignal.inputReady().then(() => {\n controller.abort()\n })\n } else {\n // Otherwise we're in the final render and we should already have all our caches\n // filled. We might still be waiting on some microtasks so we wait one tick before\n // giving up. When we give up, we still want to render the content of this cache\n // as deeply as we can so that we can suspend as deeply as possible in the tree\n // or not at all if we don't end up waiting for the input.\n scheduleOnNextTick(() => controller.abort())\n }\n\n return controller.signal\n}\n\nexport function annotateDynamicAccess(\n expression: string,\n prerenderStore: PrerenderStoreModern\n) {\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nexport function useDynamicRouteParams(expression: string) {\n if (typeof window === 'undefined') {\n const workStore = workAsyncStorage.getStore()\n\n if (\n workStore &&\n workStore.isStaticGeneration &&\n workStore.fallbackRouteParams &&\n workStore.fallbackRouteParams.size > 0\n ) {\n // There are fallback route params, we should track these as dynamic\n // accesses.\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n // We're prerendering with dynamicIO or PPR or both\n if (workUnitStore.type === 'prerender') {\n // We are in a prerender with dynamicIO semantics\n // We are going to hang here and never resolve. This will cause the currently\n // rendering component to effectively be a dynamic hole\n React.use(makeHangingPromise(workUnitStore.renderSignal, expression))\n } else if (workUnitStore.type === 'prerender-ppr') {\n // We're prerendering with PPR\n postponeWithTracking(\n workStore.route,\n expression,\n workUnitStore.dynamicTracking\n )\n } else if (workUnitStore.type === 'prerender-legacy') {\n throwToInterruptStaticGeneration(expression, workStore, workUnitStore)\n }\n }\n }\n }\n}\n\nconst hasSuspenseRegex = /\\n\\s+at Suspense \\(<anonymous>\\)/\nconst hasMetadataRegex = new RegExp(\n `\\\\n\\\\s+at ${METADATA_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasViewportRegex = new RegExp(\n `\\\\n\\\\s+at ${VIEWPORT_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasOutletRegex = new RegExp(`\\\\n\\\\s+at ${OUTLET_BOUNDARY_NAME}[\\\\n\\\\s]`)\n\nexport function trackAllowedDynamicAccess(\n route: string,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState,\n clientDynamic: DynamicTrackingState\n) {\n if (hasOutletRegex.test(componentStack)) {\n // We don't need to track that this is dynamic. It is only so when something else is also dynamic.\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n dynamicValidation.hasDynamicMetadata = true\n return\n } else if (hasViewportRegex.test(componentStack)) {\n dynamicValidation.hasDynamicViewport = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n dynamicValidation.hasSuspendedDynamic = true\n return\n } else if (\n serverDynamic.syncDynamicErrorWithStack ||\n clientDynamic.syncDynamicErrorWithStack\n ) {\n dynamicValidation.hasSyncDynamicErrors = true\n return\n } else {\n const message = `Route \"${route}\": A component accessed data, headers, params, searchParams, or a short-lived cache without a Suspense boundary nor a \"use cache\" above it. We don't have the exact line number added to error messages yet but you can see which component in the stack below. See more info: https://nextjs.org/docs/messages/next-prerender-missing-suspense`\n const error = createErrorWithComponentStack(message, componentStack)\n dynamicValidation.dynamicErrors.push(error)\n return\n }\n}\n\nfunction createErrorWithComponentStack(\n message: string,\n componentStack: string\n) {\n const error = new Error(message)\n error.stack = 'Error: ' + message + componentStack\n return error\n}\n\nexport function throwIfDisallowedDynamic(\n route: string,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState,\n clientDynamic: DynamicTrackingState\n): void {\n let syncError: null | Error\n let syncExpression: undefined | string\n let syncLogged: boolean\n if (serverDynamic.syncDynamicErrorWithStack) {\n syncError = serverDynamic.syncDynamicErrorWithStack\n syncExpression = serverDynamic.syncDynamicExpression!\n syncLogged = serverDynamic.syncDynamicLogged === true\n } else if (clientDynamic.syncDynamicErrorWithStack) {\n syncError = clientDynamic.syncDynamicErrorWithStack\n syncExpression = clientDynamic.syncDynamicExpression!\n syncLogged = clientDynamic.syncDynamicLogged === true\n } else {\n syncError = null\n syncExpression = undefined\n syncLogged = false\n }\n\n if (dynamicValidation.hasSyncDynamicErrors && syncError) {\n if (!syncLogged) {\n // In dev we already log errors about sync dynamic access. But during builds we need to ensure\n // the offending sync error is logged before we exit the build\n console.error(syncError)\n }\n // The actual error should have been logged when the sync access ocurred\n throw new StaticGenBailoutError()\n }\n\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length) {\n for (let i = 0; i < dynamicErrors.length; i++) {\n console.error(dynamicErrors[i])\n }\n\n throw new StaticGenBailoutError()\n }\n\n if (!dynamicValidation.hasSuspendedDynamic) {\n if (dynamicValidation.hasDynamicMetadata) {\n if (syncError) {\n console.error(syncError)\n throw new StaticGenBailoutError(\n `Route \"${route}\" has a \\`generateMetadata\\` that could not finish rendering before ${syncExpression} was used. Follow the instructions in the error for this expression to resolve.`\n )\n }\n throw new StaticGenBailoutError(\n `Route \"${route}\" has a \\`generateMetadata\\` that depends on Request data (\\`cookies()\\`, etc...) or external data (\\`fetch(...)\\`, etc...) but the rest of the route was static or only used cached data (\\`\"use cache\"\\`). If you expected this route to be prerenderable update your \\`generateMetadata\\` to not use Request data and only use cached external data. Otherwise, add \\`await connection()\\` somewhere within this route to indicate explicitly it should not be prerendered.`\n )\n } else if (dynamicValidation.hasDynamicViewport) {\n if (syncError) {\n console.error(syncError)\n throw new StaticGenBailoutError(\n `Route \"${route}\" has a \\`generateViewport\\` that could not finish rendering before ${syncExpression} was used. Follow the instructions in the error for this expression to resolve.`\n )\n }\n throw new StaticGenBailoutError(\n `Route \"${route}\" has a \\`generateViewport\\` that depends on Request data (\\`cookies()\\`, etc...) or external data (\\`fetch(...)\\`, etc...) but the rest of the route was static or only used cached data (\\`\"use cache\"\\`). If you expected this route to be prerenderable update your \\`generateViewport\\` to not use Request data and only use cached external data. Otherwise, add \\`await connection()\\` somewhere within this route to indicate explicitly it should not be prerendered.`\n )\n }\n }\n}\n","/**\n * Clones a response by teeing the body so we can return two independent\n * ReadableStreams from it. This avoids the bug in the undici library around\n * response cloning.\n *\n * After cloning, the original response's body will be consumed and closed.\n *\n * @see https://github.com/vercel/next.js/pull/73274\n *\n * @param original - The original response to clone.\n * @returns A tuple containing two independent clones of the original response.\n */\nexport function cloneResponse(original: Response): [Response, Response] {\n // If the response has no body, then we can just return the original response\n // twice because it's immutable.\n if (!original.body) {\n return [original, original]\n }\n\n const [body1, body2] = original.body.tee()\n\n const cloned1 = new Response(body1, {\n status: original.status,\n statusText: original.statusText,\n headers: original.headers,\n })\n\n Object.defineProperty(cloned1, 'url', {\n value: original.url,\n })\n\n const cloned2 = new Response(body2, {\n status: original.status,\n statusText: original.statusText,\n headers: original.headers,\n })\n\n Object.defineProperty(cloned2, 'url', {\n value: original.url,\n })\n\n return [cloned1, cloned2]\n}\n","import type { OutgoingHttpHeaders } from 'http'\nimport type RenderResult from '../render-result'\nimport type { Revalidate } from '../lib/revalidate'\nimport type { RouteKind } from '../route-kind'\n\nexport interface ResponseCacheBase {\n get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n incrementalCache: IncrementalCache\n /**\n * This is a hint to the cache to help it determine what kind of route\n * this is so it knows where to look up the cache entry from. If not\n * provided it will test the filesystem to check.\n */\n routeKind: RouteKind\n\n /**\n * True if this is a fallback request.\n */\n isFallback?: boolean\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n }\n ): Promise<ResponseCacheEntry | null>\n}\n\n// The server components HMR cache might store other data as well in the future,\n// at which point this should be refactored to a discriminated union type.\nexport interface ServerComponentsHmrCache {\n get(key: string): CachedFetchData | undefined\n set(key: string, data: CachedFetchData): void\n}\n\nexport type CachedFetchData = {\n headers: Record<string, string>\n body: string\n url: string\n status?: number\n}\n\nexport const enum CachedRouteKind {\n APP_PAGE = 'APP_PAGE',\n APP_ROUTE = 'APP_ROUTE',\n PAGES = 'PAGES',\n FETCH = 'FETCH',\n REDIRECT = 'REDIRECT',\n IMAGE = 'IMAGE',\n}\n\nexport interface CachedFetchValue {\n kind: CachedRouteKind.FETCH\n data: CachedFetchData\n // tags are only present with file-system-cache\n // fetch cache stores tags outside of cache entry\n tags?: string[]\n revalidate: number\n}\n\nexport interface CachedRedirectValue {\n kind: CachedRouteKind.REDIRECT\n props: Object\n}\n\nexport interface CachedAppPageValue {\n kind: CachedRouteKind.APP_PAGE\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n html: RenderResult\n rscData: Buffer | undefined\n status: number | undefined\n postponed: string | undefined\n headers: OutgoingHttpHeaders | undefined\n segmentData: Map<string, Buffer> | undefined\n}\n\nexport interface CachedPageValue {\n kind: CachedRouteKind.PAGES\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n html: RenderResult\n pageData: Object\n status: number | undefined\n headers: OutgoingHttpHeaders | undefined\n}\n\nexport interface CachedRouteValue {\n kind: CachedRouteKind.APP_ROUTE\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n body: Buffer\n status: number\n headers: OutgoingHttpHeaders\n}\n\nexport interface CachedImageValue {\n kind: CachedRouteKind.IMAGE\n etag: string\n upstreamEtag: string\n buffer: Buffer\n extension: string\n isMiss?: boolean\n isStale?: boolean\n}\n\nexport interface IncrementalCachedAppPageValue {\n kind: CachedRouteKind.APP_PAGE\n // this needs to be a string since the cache expects to store\n // the string value\n html: string\n rscData: Buffer | undefined\n headers: OutgoingHttpHeaders | undefined\n postponed: string | undefined\n status: number | undefined\n segmentData: Map<string, Buffer> | undefined\n}\n\nexport interface IncrementalCachedPageValue {\n kind: CachedRouteKind.PAGES\n // this needs to be a string since the cache expects to store\n // the string value\n html: string\n pageData: Object\n headers: OutgoingHttpHeaders | undefined\n status: number | undefined\n}\n\nexport type IncrementalCacheEntry = {\n curRevalidate?: Revalidate\n // milliseconds to revalidate after\n revalidateAfter: Revalidate\n // -1 here dictates a blocking revalidate should be used\n isStale?: boolean | -1\n value: IncrementalCacheValue | null\n isFallback: boolean | undefined\n}\n\nexport type IncrementalCacheValue =\n | CachedRedirectValue\n | IncrementalCachedPageValue\n | IncrementalCachedAppPageValue\n | CachedImageValue\n | CachedFetchValue\n | CachedRouteValue\n\nexport type ResponseCacheValue =\n | CachedRedirectValue\n | CachedPageValue\n | CachedAppPageValue\n | CachedImageValue\n | CachedRouteValue\n\nexport type ResponseCacheEntry = {\n revalidate?: Revalidate\n value: ResponseCacheValue | null\n isStale?: boolean | -1\n isMiss?: boolean\n isFallback: boolean | undefined\n}\n\n/**\n * @param hasResolved whether the responseGenerator has resolved it's promise\n * @param previousCacheEntry the previous cache entry if it exists or the current\n */\nexport type ResponseGenerator = (state: {\n hasResolved: boolean\n previousCacheEntry?: IncrementalCacheItem\n isRevalidating?: boolean\n}) => Promise<ResponseCacheEntry | null>\n\nexport type IncrementalCacheItem = {\n revalidateAfter?: number | false\n curRevalidate?: number | false\n revalidate?: number | false\n value: IncrementalCacheValue | null\n isStale?: boolean | -1\n isMiss?: boolean\n isFallback: boolean | undefined\n} | null\n\nexport const enum IncrementalCacheKind {\n APP_PAGE = 'APP_PAGE',\n APP_ROUTE = 'APP_ROUTE',\n PAGES = 'PAGES',\n FETCH = 'FETCH',\n IMAGE = 'IMAGE',\n}\n\nexport interface IncrementalCache {\n get: (\n key: string,\n ctx: {\n kind: IncrementalCacheKind\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n\n /**\n * True if this is a fallback request.\n */\n isFallback: boolean\n }\n ) => Promise<IncrementalCacheItem>\n set: (\n key: string,\n data: IncrementalCacheValue | null,\n ctx: {\n revalidate: Revalidate\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n\n /**\n * True if this is a fallback request.\n */\n isFallback: boolean\n }\n ) => Promise<void>\n}\n","/**\n * A `Promise.withResolvers` implementation that exposes the `resolve` and\n * `reject` functions on a `Promise`.\n *\n * @see https://tc39.es/proposal-promise-with-resolvers/\n */\nexport class DetachedPromise<T = any> {\n public readonly resolve: (value: T | PromiseLike<T>) => void\n public readonly reject: (reason: any) => void\n public readonly promise: Promise<T>\n\n constructor() {\n let resolve: (value: T | PromiseLike<T>) => void\n let reject: (reason: any) => void\n\n // Create the promise and assign the resolvers to the object.\n this.promise = new Promise<T>((res, rej) => {\n resolve = res\n reject = rej\n })\n\n // We know that resolvers is defined because the Promise constructor runs\n // synchronously.\n this.resolve = resolve!\n this.reject = reject!\n }\n}\n","export const ENCODED_TAGS = {\n // opening tags do not have the closing `>` since they can contain other attributes such as `<body className=''>`\n OPENING: {\n // <html\n HTML: new Uint8Array([60, 104, 116, 109, 108]),\n // <body\n BODY: new Uint8Array([60, 98, 111, 100, 121]),\n },\n CLOSED: {\n // </head>\n HEAD: new Uint8Array([60, 47, 104, 101, 97, 100, 62]),\n // </body>\n BODY: new Uint8Array([60, 47, 98, 111, 100, 121, 62]),\n // </html>\n HTML: new Uint8Array([60, 47, 104, 116, 109, 108, 62]),\n // </body></html>\n BODY_AND_HTML: new Uint8Array([\n 60, 47, 98, 111, 100, 121, 62, 60, 47, 104, 116, 109, 108, 62,\n ]),\n },\n} as const\n","/**\n * Find the starting index of Uint8Array `b` within Uint8Array `a`.\n */\nexport function indexOfUint8Array(a: Uint8Array, b: Uint8Array) {\n if (b.length === 0) return 0\n if (a.length === 0 || b.length > a.length) return -1\n\n // start iterating through `a`\n for (let i = 0; i <= a.length - b.length; i++) {\n let completeMatch = true\n // from index `i`, iterate through `b` and check for mismatch\n for (let j = 0; j < b.length; j++) {\n // if the values do not match, then this isn't a complete match, exit `b` iteration early and iterate to next index of `a`.\n if (a[i + j] !== b[j]) {\n completeMatch = false\n break\n }\n }\n\n if (completeMatch) {\n return i\n }\n }\n\n return -1\n}\n\n/**\n * Check if two Uint8Arrays are strictly equivalent.\n */\nexport function isEquivalentUint8Arrays(a: Uint8Array, b: Uint8Array) {\n if (a.length !== b.length) return false\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n\n return true\n}\n\n/**\n * Remove Uint8Array `b` from Uint8Array `a`.\n *\n * If `b` is not in `a`, `a` is returned unchanged.\n *\n * Otherwise, the function returns a new Uint8Array instance with size `a.length - b.length`\n */\nexport function removeFromUint8Array(a: Uint8Array, b: Uint8Array) {\n const tagIndex = indexOfUint8Array(a, b)\n if (tagIndex === 0) return a.subarray(b.length)\n if (tagIndex > -1) {\n const removed = new Uint8Array(a.length - b.length)\n removed.set(a.slice(0, tagIndex))\n removed.set(a.slice(tagIndex + b.length), tagIndex)\n return removed\n } else {\n return a\n }\n}\n","import { getTracer } from '../lib/trace/tracer'\nimport { AppRenderSpan } from '../lib/trace/constants'\nimport { DetachedPromise } from '../../lib/detached-promise'\nimport { scheduleImmediate, atLeastOneTask } from '../../lib/scheduler'\nimport { ENCODED_TAGS } from './encodedTags'\nimport {\n indexOfUint8Array,\n isEquivalentUint8Arrays,\n removeFromUint8Array,\n} from './uint8array-helpers'\n\nfunction voidCatch() {\n // this catcher is designed to be used with pipeTo where we expect the underlying\n // pipe implementation to forward errors but we don't want the pipeTo promise to reject\n // and be unhandled\n}\n\nexport type ReactReadableStream = ReadableStream<Uint8Array> & {\n allReady?: Promise<void> | undefined\n}\n\n// We can share the same encoder instance everywhere\n// Notably we cannot do the same for TextDecoder because it is stateful\n// when handling streaming data\nconst encoder = new TextEncoder()\n\nexport function chainStreams<T>(\n ...streams: ReadableStream<T>[]\n): ReadableStream<T> {\n // We could encode this invariant in the arguments but current uses of this function pass\n // use spread so it would be missed by\n if (streams.length === 0) {\n throw new Error('Invariant: chainStreams requires at least one stream')\n }\n\n // If we only have 1 stream we fast path it by returning just this stream\n if (streams.length === 1) {\n return streams[0]\n }\n\n const { readable, writable } = new TransformStream()\n\n // We always initiate pipeTo immediately. We know we have at least 2 streams\n // so we need to avoid closing the writable when this one finishes.\n let promise = streams[0].pipeTo(writable, { preventClose: true })\n\n let i = 1\n for (; i < streams.length - 1; i++) {\n const nextStream = streams[i]\n promise = promise.then(() =>\n nextStream.pipeTo(writable, { preventClose: true })\n )\n }\n\n // We can omit the length check because we halted before the last stream and there\n // is at least two streams so the lastStream here will always be defined\n const lastStream = streams[i]\n promise = promise.then(() => lastStream.pipeTo(writable))\n\n // Catch any errors from the streams and ignore them, they will be handled\n // by whatever is consuming the readable stream.\n promise.catch(voidCatch)\n\n return readable\n}\n\nexport function streamFromString(str: string): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(encoder.encode(str))\n controller.close()\n },\n })\n}\n\nexport function streamFromBuffer(chunk: Buffer): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(chunk)\n controller.close()\n },\n })\n}\n\nexport async function streamToBuffer(\n stream: ReadableStream<Uint8Array>\n): Promise<Buffer> {\n const reader = stream.getReader()\n const chunks: Uint8Array[] = []\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n break\n }\n\n chunks.push(value)\n }\n\n return Buffer.concat(chunks)\n}\n\nexport async function streamToString(\n stream: ReadableStream<Uint8Array>,\n signal?: AbortSignal\n): Promise<string> {\n const decoder = new TextDecoder('utf-8', { fatal: true })\n let string = ''\n\n for await (const chunk of stream) {\n if (signal?.aborted) {\n return string\n }\n\n string += decoder.decode(chunk, { stream: true })\n }\n\n string += decoder.decode()\n\n return string\n}\n\nexport function createBufferedTransformStream(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n let bufferedChunks: Array<Uint8Array> = []\n let bufferByteLength: number = 0\n let pending: DetachedPromise<void> | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n // If we already have a pending flush, then return early.\n if (pending) return\n\n const detached = new DetachedPromise<void>()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n const chunk = new Uint8Array(bufferByteLength)\n let copiedBytes = 0\n\n for (let i = 0; i < bufferedChunks.length; i++) {\n const bufferedChunk = bufferedChunks[i]\n chunk.set(bufferedChunk, copiedBytes)\n copiedBytes += bufferedChunk.byteLength\n }\n // We just wrote all the buffered chunks so we need to reset the bufferedChunks array\n // and our bufferByteLength to prepare for the next round of buffered chunks\n bufferedChunks.length = 0\n bufferByteLength = 0\n controller.enqueue(chunk)\n } catch {\n // If an error occurs while enqueuing it can't be due to this\n // transformers fault. It's likely due to the controller being\n // errored due to the stream being cancelled.\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n // Combine the previous buffer with the new chunk.\n bufferedChunks.push(chunk)\n bufferByteLength += chunk.byteLength\n\n // Flush the buffer to the controller.\n flush(controller)\n },\n flush() {\n if (!pending) return\n\n return pending.promise\n },\n })\n}\n\nfunction createInsertedHTMLStream(\n getServerInsertedHTML: () => Promise<string>\n): TransformStream<Uint8Array, Uint8Array> {\n return new TransformStream({\n transform: async (chunk, controller) => {\n const html = await getServerInsertedHTML()\n if (html) {\n controller.enqueue(encoder.encode(html))\n }\n\n controller.enqueue(chunk)\n },\n })\n}\n\nexport function renderToInitialFizzStream({\n ReactDOMServer,\n element,\n streamOptions,\n}: {\n ReactDOMServer: typeof import('react-dom/server.edge')\n element: React.ReactElement\n streamOptions?: Parameters<typeof ReactDOMServer.renderToReadableStream>[1]\n}): Promise<ReactReadableStream> {\n return getTracer().trace(AppRenderSpan.renderToReadableStream, async () =>\n ReactDOMServer.renderToReadableStream(element, streamOptions)\n )\n}\n\nfunction createHeadInsertionTransformStream(\n insert: () => Promise<string>\n): TransformStream<Uint8Array, Uint8Array> {\n let inserted = false\n let freezing = false\n\n // We need to track if this transform saw any bytes because if it didn't\n // we won't want to insert any server HTML at all\n let hasBytes = false\n\n return new TransformStream({\n async transform(chunk, controller) {\n hasBytes = true\n // While react is flushing chunks, we don't apply insertions\n if (freezing) {\n controller.enqueue(chunk)\n return\n }\n\n const insertion = await insert()\n\n if (inserted) {\n if (insertion) {\n const encodedInsertion = encoder.encode(insertion)\n controller.enqueue(encodedInsertion)\n }\n controller.enqueue(chunk)\n freezing = true\n } else {\n // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for.\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.HEAD)\n if (index !== -1) {\n if (insertion) {\n const encodedInsertion = encoder.encode(insertion)\n const insertedHeadContent = new Uint8Array(\n chunk.length + encodedInsertion.length\n )\n insertedHeadContent.set(chunk.slice(0, index))\n insertedHeadContent.set(encodedInsertion, index)\n insertedHeadContent.set(\n chunk.slice(index),\n index + encodedInsertion.length\n )\n controller.enqueue(insertedHeadContent)\n } else {\n controller.enqueue(chunk)\n }\n freezing = true\n inserted = true\n }\n }\n\n if (!inserted) {\n controller.enqueue(chunk)\n } else {\n scheduleImmediate(() => {\n freezing = false\n })\n }\n },\n async flush(controller) {\n // Check before closing if there's anything remaining to insert.\n if (hasBytes) {\n const insertion = await insert()\n if (insertion) {\n controller.enqueue(encoder.encode(insertion))\n }\n }\n },\n })\n}\n\n// Suffix after main body content - scripts before </body>,\n// but wait for the major chunks to be enqueued.\nfunction createDeferredSuffixStream(\n suffix: string\n): TransformStream<Uint8Array, Uint8Array> {\n let flushed = false\n let pending: DetachedPromise<void> | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n const detached = new DetachedPromise<void>()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n controller.enqueue(encoder.encode(suffix))\n } catch {\n // If an error occurs while enqueuing it can't be due to this\n // transformers fault. It's likely due to the controller being\n // errored due to the stream being cancelled.\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // If we've already flushed, we're done.\n if (flushed) return\n\n // Schedule the flush to happen.\n flushed = true\n flush(controller)\n },\n flush(controller) {\n if (pending) return pending.promise\n if (flushed) return\n\n // Flush now.\n controller.enqueue(encoder.encode(suffix))\n },\n })\n}\n\n// Merge two streams into one. Ensure the final transform stream is closed\n// when both are finished.\nfunction createMergedTransformStream(\n stream: ReadableStream<Uint8Array>\n): TransformStream<Uint8Array, Uint8Array> {\n let pull: Promise<void> | null = null\n let donePulling = false\n\n async function startPulling(controller: TransformStreamDefaultController) {\n if (pull) {\n return\n }\n\n const reader = stream.getReader()\n\n // NOTE: streaming flush\n // We are buffering here for the inlined data stream because the\n // \"shell\" stream might be chunkenized again by the underlying stream\n // implementation, e.g. with a specific high-water mark. To ensure it's\n // the safe timing to pipe the data stream, this extra tick is\n // necessary.\n\n // We don't start reading until we've left the current Task to ensure\n // that it's inserted after flushing the shell. Note that this implementation\n // might get stale if impl details of Fizz change in the future.\n await atLeastOneTask()\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n donePulling = true\n return\n }\n\n controller.enqueue(value)\n }\n } catch (err) {\n controller.error(err)\n }\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // Start the streaming if it hasn't already been started yet.\n if (!pull) {\n pull = startPulling(controller)\n }\n },\n flush(controller) {\n if (donePulling) {\n return\n }\n return pull || startPulling(controller)\n },\n })\n}\n\nconst CLOSE_TAG = '</body></html>'\n\n/**\n * This transform stream moves the suffix to the end of the stream, so results\n * like `</body></html><script>...</script>` will be transformed to\n * `<script>...</script></body></html>`.\n */\nfunction createMoveSuffixStream(): TransformStream<Uint8Array, Uint8Array> {\n let foundSuffix = false\n\n return new TransformStream({\n transform(chunk, controller) {\n if (foundSuffix) {\n return controller.enqueue(chunk)\n }\n\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n if (index > -1) {\n foundSuffix = true\n\n // If the whole chunk is the suffix, then don't write anything, it will\n // be written in the flush.\n if (chunk.length === ENCODED_TAGS.CLOSED.BODY_AND_HTML.length) {\n return\n }\n\n // Write out the part before the suffix.\n const before = chunk.slice(0, index)\n controller.enqueue(before)\n\n // In the case where the suffix is in the middle of the chunk, we need\n // to split the chunk into two parts.\n if (chunk.length > ENCODED_TAGS.CLOSED.BODY_AND_HTML.length + index) {\n // Write out the part after the suffix.\n const after = chunk.slice(\n index + ENCODED_TAGS.CLOSED.BODY_AND_HTML.length\n )\n controller.enqueue(after)\n }\n } else {\n controller.enqueue(chunk)\n }\n },\n flush(controller) {\n // Even if we didn't find the suffix, the HTML is not valid if we don't\n // add it, so insert it at the end.\n controller.enqueue(ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n },\n })\n}\n\nfunction createStripDocumentClosingTagsTransform(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n return new TransformStream({\n transform(chunk, controller) {\n // We rely on the assumption that chunks will never break across a code unit.\n // This is reasonable because we currently concat all of React's output from a single\n // flush into one chunk before streaming it forward which means the chunk will represent\n // a single coherent utf-8 string. This is not safe to use if we change our streaming to no\n // longer do this large buffered chunk\n if (\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.HTML)\n ) {\n // the entire chunk is the closing tags; return without enqueueing anything.\n return\n }\n\n // We assume these tags will go at together at the end of the document and that\n // they won't appear anywhere else in the document. This is not really a safe assumption\n // but until we revamp our streaming infra this is a performant way to string the tags\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY)\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.HTML)\n\n controller.enqueue(chunk)\n },\n })\n}\n\n/*\n * Checks if the root layout is missing the html or body tags\n * and if so, it will inject a script tag to throw an error in the browser, showing the user\n * the error message in the error overlay.\n */\nexport function createRootLayoutValidatorStream(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n let foundHtml = false\n let foundBody = false\n return new TransformStream({\n async transform(chunk, controller) {\n // Peek into the streamed chunk to see if the tags are present.\n if (\n !foundHtml &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.HTML) > -1\n ) {\n foundHtml = true\n }\n\n if (\n !foundBody &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.BODY) > -1\n ) {\n foundBody = true\n }\n\n controller.enqueue(chunk)\n },\n flush(controller) {\n const missingTags: typeof window.__next_root_layout_missing_tags = []\n if (!foundHtml) missingTags.push('html')\n if (!foundBody) missingTags.push('body')\n\n if (!missingTags.length) return\n\n controller.enqueue(\n encoder.encode(\n `<script>self.__next_root_layout_missing_tags=${JSON.stringify(\n missingTags\n )}</script>`\n )\n )\n },\n })\n}\n\nfunction chainTransformers<T>(\n readable: ReadableStream<T>,\n transformers: ReadonlyArray<TransformStream<T, T> | null>\n): ReadableStream<T> {\n let stream = readable\n for (const transformer of transformers) {\n if (!transformer) continue\n\n stream = stream.pipeThrough(transformer)\n }\n return stream\n}\n\nexport type ContinueStreamOptions = {\n inlinedDataStream: ReadableStream<Uint8Array> | undefined\n isStaticGeneration: boolean\n getServerInsertedHTML: (() => Promise<string>) | undefined\n serverInsertedHTMLToHead: boolean\n validateRootLayout?: boolean\n /**\n * Suffix to inject after the buffered data, but before the close tags.\n */\n suffix?: string | undefined\n}\n\nexport async function continueFizzStream(\n renderStream: ReactReadableStream,\n {\n suffix,\n inlinedDataStream,\n isStaticGeneration,\n getServerInsertedHTML,\n serverInsertedHTMLToHead,\n validateRootLayout,\n }: ContinueStreamOptions\n): Promise<ReadableStream<Uint8Array>> {\n // Suffix itself might contain close tags at the end, so we need to split it.\n const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null\n\n // If we're generating static HTML and there's an `allReady` promise on the\n // stream, we need to wait for it to resolve before continuing.\n if (isStaticGeneration && 'allReady' in renderStream) {\n await renderStream.allReady\n }\n\n return chainTransformers(renderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n\n // Insert generated tags to head\n getServerInsertedHTML && !serverInsertedHTMLToHead\n ? createInsertedHTMLStream(getServerInsertedHTML)\n : null,\n\n // Insert suffix content\n suffixUnclosed != null && suffixUnclosed.length > 0\n ? createDeferredSuffixStream(suffixUnclosed)\n : null,\n\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n inlinedDataStream ? createMergedTransformStream(inlinedDataStream) : null,\n\n // Validate the root layout for missing html or body tags\n validateRootLayout ? createRootLayoutValidatorStream() : null,\n\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n\n // Special head insertions\n // TODO-APP: Insert server side html to end of head in app layout rendering, to avoid\n // hydration errors. Remove this once it's ready to be handled by react itself.\n getServerInsertedHTML && serverInsertedHTMLToHead\n ? createHeadInsertionTransformStream(getServerInsertedHTML)\n : null,\n ])\n}\n\ntype ContinueDynamicPrerenderOptions = {\n getServerInsertedHTML: () => Promise<string>\n}\n\nexport async function continueDynamicPrerender(\n prerenderStream: ReadableStream<Uint8Array>,\n { getServerInsertedHTML }: ContinueDynamicPrerenderOptions\n) {\n return (\n prerenderStream\n // Buffer everything to avoid flushing too frequently\n .pipeThrough(createBufferedTransformStream())\n .pipeThrough(createStripDocumentClosingTagsTransform())\n // Insert generated tags to head\n .pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML))\n )\n}\n\ntype ContinueStaticPrerenderOptions = {\n inlinedDataStream: ReadableStream<Uint8Array>\n getServerInsertedHTML: () => Promise<string>\n}\n\nexport async function continueStaticPrerender(\n prerenderStream: ReadableStream<Uint8Array>,\n { inlinedDataStream, getServerInsertedHTML }: ContinueStaticPrerenderOptions\n) {\n return (\n prerenderStream\n // Buffer everything to avoid flushing too frequently\n .pipeThrough(createBufferedTransformStream())\n // Insert generated tags to head\n .pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML))\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n .pipeThrough(createMergedTransformStream(inlinedDataStream))\n // Close tags should always be deferred to the end\n .pipeThrough(createMoveSuffixStream())\n )\n}\n\ntype ContinueResumeOptions = {\n inlinedDataStream: ReadableStream<Uint8Array>\n getServerInsertedHTML: () => Promise<string>\n}\n\nexport async function continueDynamicHTMLResume(\n renderStream: ReadableStream<Uint8Array>,\n { inlinedDataStream, getServerInsertedHTML }: ContinueResumeOptions\n) {\n return (\n renderStream\n // Buffer everything to avoid flushing too frequently\n .pipeThrough(createBufferedTransformStream())\n // Insert generated tags to head\n .pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML))\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n .pipeThrough(createMergedTransformStream(inlinedDataStream))\n // Close tags should always be deferred to the end\n .pipeThrough(createMoveSuffixStream())\n )\n}\n\nexport function createDocumentClosingStream(): ReadableStream<Uint8Array> {\n return streamFromString(CLOSE_TAG)\n}\n","/* eslint-disable no-redeclare */\nimport type { IncomingMessage } from 'http'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { UrlWithParsedQuery } from 'url'\nimport type { BaseNextRequest } from './base-http'\nimport type { CloneableBody } from './body-streams'\nimport type { RouteMatch } from './route-matches/route-match'\nimport type { NEXT_RSC_UNION_QUERY } from '../client/components/app-router-headers'\nimport type { ServerComponentsHmrCache } from './response-cache'\n\n// FIXME: (wyattjoh) this is a temporary solution to allow us to pass data between bundled modules\nexport const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta')\n\nexport type NextIncomingMessage = (BaseNextRequest | IncomingMessage) & {\n [NEXT_REQUEST_META]?: RequestMeta\n}\n\nexport interface RequestMeta {\n /**\n * The query that was used to make the request.\n */\n initQuery?: ParsedUrlQuery\n\n /**\n * The URL that was used to make the request.\n */\n initURL?: string\n\n /**\n * The protocol that was used to make the request.\n */\n initProtocol?: string\n\n /**\n * The body that was read from the request. This is used to allow the body to\n * be read multiple times.\n */\n clonableBody?: CloneableBody\n\n /**\n * True when the request matched a locale domain that was configured in the\n * next.config.js file.\n */\n isLocaleDomain?: boolean\n\n /**\n * True when the request had locale information stripped from the pathname\n * part of the URL.\n */\n didStripLocale?: boolean\n\n /**\n * If the request had it's URL rewritten, this is the URL it was rewritten to.\n */\n rewroteURL?: string\n\n /**\n * The cookies that were added by middleware and were added to the response.\n */\n middlewareCookie?: string[]\n\n /**\n * The match on the request for a given route.\n */\n match?: RouteMatch\n\n /**\n * The incremental cache to use for the request.\n */\n incrementalCache?: any\n\n /**\n * The server components HMR cache, only for dev.\n */\n serverComponentsHmrCache?: ServerComponentsHmrCache\n\n /**\n * True when the request is for the prefetch flight data.\n */\n isPrefetchRSCRequest?: true\n\n /**\n * True when the request is for the flight data.\n */\n isRSCRequest?: true\n\n /**\n * True when the request is for the `/_next/data` route using the pages\n * router.\n */\n isNextDataReq?: true\n\n /**\n * Postponed state to use for resumption. If present it's assumed that the\n * request is for a page that has postponed (there are no guarantees that the\n * page actually has postponed though as it would incur an additional cache\n * lookup).\n */\n postponed?: string\n\n /**\n * If provided, this will be called when a response cache entry was generated\n * or looked up in the cache.\n */\n onCacheEntry?: (\n cacheEntry: any,\n requestMeta: any\n ) => Promise<boolean | void> | boolean | void\n\n /**\n * The previous revalidate before rendering 404 page for notFound: true\n */\n notFoundRevalidate?: number | false\n\n /**\n * In development, the original source page that returned a 404.\n */\n developmentNotFoundSourcePage?: string\n\n /**\n * The path we routed to and should be invoked\n */\n invokePath?: string\n\n /**\n * The specific page output we should be matching\n */\n invokeOutput?: string\n\n /**\n * The status we are invoking the request with from routing\n */\n invokeStatus?: number\n\n /**\n * The routing error we are invoking with\n */\n invokeError?: Error\n\n /**\n * The query parsed for the invocation\n */\n invokeQuery?: Record<string, undefined | string | string[]>\n\n /**\n * Whether the request is a middleware invocation\n */\n middlewareInvoke?: boolean\n\n /**\n * Whether the default route matches were set on the request during routing.\n */\n didSetDefaultRouteMatches?: boolean\n\n /**\n * Whether the request is for the custom error page.\n */\n customErrorRender?: true\n\n /**\n * Whether to bubble up the NoFallbackError to the caller when a 404 is\n * returned.\n */\n bubbleNoFallback?: true\n\n /**\n * True when the request had locale information inferred from the default\n * locale.\n */\n localeInferredFromDefault?: true\n\n /**\n * The locale that was inferred or explicitly set for the request.\n */\n locale?: string\n\n /**\n * The default locale that was inferred or explicitly set for the request.\n */\n defaultLocale?: string\n}\n\n/**\n * Gets the request metadata. If no key is provided, the entire metadata object\n * is returned.\n *\n * @param req the request to get the metadata from\n * @param key the key to get from the metadata (optional)\n * @returns the value for the key or the entire metadata object\n */\nexport function getRequestMeta(\n req: NextIncomingMessage,\n key?: undefined\n): RequestMeta\nexport function getRequestMeta<K extends keyof RequestMeta>(\n req: NextIncomingMessage,\n key: K\n): RequestMeta[K]\nexport function getRequestMeta<K extends keyof RequestMeta>(\n req: NextIncomingMessage,\n key?: K\n): RequestMeta | RequestMeta[K] {\n const meta = req[NEXT_REQUEST_META] || {}\n return typeof key === 'string' ? meta[key] : meta\n}\n\n/**\n * Sets the request metadata.\n *\n * @param req the request to set the metadata on\n * @param meta the metadata to set\n * @returns the mutated request metadata\n */\nexport function setRequestMeta(req: NextIncomingMessage, meta: RequestMeta) {\n req[NEXT_REQUEST_META] = meta\n return meta\n}\n\n/**\n * Adds a value to the request metadata.\n *\n * @param request the request to mutate\n * @param key the key to set\n * @param value the value to set\n * @returns the mutated request metadata\n */\nexport function addRequestMeta<K extends keyof RequestMeta>(\n request: NextIncomingMessage,\n key: K,\n value: RequestMeta[K]\n) {\n const meta = getRequestMeta(request)\n meta[key] = value\n return setRequestMeta(request, meta)\n}\n\n/**\n * Removes a key from the request metadata.\n *\n * @param request the request to mutate\n * @param key the key to remove\n * @returns the mutated request metadata\n */\nexport function removeRequestMeta<K extends keyof RequestMeta>(\n request: NextIncomingMessage,\n key: K\n) {\n const meta = getRequestMeta(request)\n delete meta[key]\n return setRequestMeta(request, meta)\n}\n\ntype NextQueryMetadata = {\n /**\n * The `_rsc` query parameter used for cache busting to ensure that the RSC\n * requests do not get cached by the browser explicitly.\n */\n [NEXT_RSC_UNION_QUERY]?: string\n}\n\nexport type NextParsedUrlQuery = ParsedUrlQuery &\n NextQueryMetadata & {\n amp?: '1'\n }\n\nexport interface NextUrlWithParsedQuery extends UrlWithParsedQuery {\n query: NextParsedUrlQuery\n}\n","/**\n * Removes the trailing slash for a given route or page path. Preserves the\n * root page. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n * - `/` -> `/`\n */\nexport function removeTrailingSlash(route: string) {\n return route.replace(/\\/$/, '') || '/'\n}\n","/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */\nexport function parsePath(path: string) {\n const hashIndex = path.indexOf('#')\n const queryIndex = path.indexOf('?')\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex)\n\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery\n ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined)\n : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : '',\n }\n }\n\n return { pathname: path, query: '', hash: '' }\n}\n","import { parsePath } from './parse-path'\n\n/**\n * Adds the provided prefix to the given path. It first ensures that the path\n * is indeed starting with a slash.\n */\nexport function addPathPrefix(path: string, prefix?: string) {\n if (!path.startsWith('/') || !prefix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${prefix}${pathname}${query}${hash}`\n}\n","import { parsePath } from './parse-path'\n\n/**\n * Similarly to `addPathPrefix`, this function adds a suffix at the end on the\n * provided path. It also works only for paths ensuring the argument starts\n * with a slash.\n */\nexport function addPathSuffix(path: string, suffix?: string) {\n if (!path.startsWith('/') || !suffix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${pathname}${suffix}${query}${hash}`\n}\n","import { parsePath } from './parse-path'\n\n/**\n * Checks if a given path starts with a given prefix. It ensures it matches\n * exactly without containing extra chars. e.g. prefix /docs should replace\n * for /docs, /docs/, /docs/a but not /docsss\n * @param path The path to check.\n * @param prefix The prefix to check against.\n */\nexport function pathHasPrefix(path: string, prefix: string) {\n if (typeof path !== 'string') {\n return false\n }\n\n const { pathname } = parsePath(path)\n return pathname === prefix || pathname.startsWith(prefix + '/')\n}\n","export interface PathLocale {\n detectedLocale?: string\n pathname: string\n}\n\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */\nconst cache = new WeakMap<readonly string[], readonly string[]>()\n\n/**\n * For a pathname that may include a locale from a list of locales, it\n * removes the locale from the pathname returning it alongside with the\n * detected locale.\n *\n * @param pathname A pathname that may include a locale.\n * @param locales A list of locales.\n * @returns The detected locale and pathname without locale\n */\nexport function normalizeLocalePath(\n pathname: string,\n locales?: readonly string[]\n): PathLocale {\n // If locales is undefined, return the pathname as is.\n if (!locales) return { pathname }\n\n // Get the cached lowercased locales or create a new cache entry.\n let lowercasedLocales = cache.get(locales)\n if (!lowercasedLocales) {\n lowercasedLocales = locales.map((locale) => locale.toLowerCase())\n cache.set(locales, lowercasedLocales)\n }\n\n let detectedLocale: string | undefined\n\n // The first segment will be empty, because it has a leading `/`. If\n // there is no further segment, there is no locale (or it's the default).\n const segments = pathname.split('/', 2)\n\n // If there's no second segment (ie, the pathname is just `/`), there's no\n // locale.\n if (!segments[1]) return { pathname }\n\n // The second segment will contain the locale part if any.\n const segment = segments[1].toLowerCase()\n\n // See if the segment matches one of the locales. If it doesn't, there is\n // no locale (or it's the default).\n const index = lowercasedLocales.indexOf(segment)\n if (index < 0) return { pathname }\n\n // Return the case-sensitive locale.\n detectedLocale = locales[index]\n\n // Remove the `/${locale}` part of the pathname.\n pathname = pathname.slice(detectedLocale.length + 1) || '/'\n\n return { pathname, detectedLocale }\n}\n","import type { OutgoingHttpHeaders } from 'http'\nimport type { DomainLocale, I18NConfig } from '../config-shared'\nimport type { I18NProvider } from '../lib/i18n-provider'\n\nimport { detectDomainLocale } from '../../shared/lib/i18n/detect-domain-locale'\nimport { formatNextPathnameInfo } from '../../shared/lib/router/utils/format-next-pathname-info'\nimport { getHostname } from '../../shared/lib/get-hostname'\nimport { getNextPathnameInfo } from '../../shared/lib/router/utils/get-next-pathname-info'\n\ninterface Options {\n base?: string | URL\n headers?: OutgoingHttpHeaders\n forceLocale?: boolean\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n i18nProvider?: I18NProvider\n}\n\nconst REGEX_LOCALHOST_HOSTNAME =\n /(?!^https?:\\/\\/)(127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\\[::1\\]|localhost)/\n\nfunction parseURL(url: string | URL, base?: string | URL) {\n return new URL(\n String(url).replace(REGEX_LOCALHOST_HOSTNAME, 'localhost'),\n base && String(base).replace(REGEX_LOCALHOST_HOSTNAME, 'localhost')\n )\n}\n\nconst Internal = Symbol('NextURLInternal')\n\nexport class NextURL {\n private [Internal]: {\n basePath: string\n buildId?: string\n flightSearchParameters?: Record<string, string>\n defaultLocale?: string\n domainLocale?: DomainLocale\n locale?: string\n options: Options\n trailingSlash?: boolean\n url: URL\n }\n\n constructor(input: string | URL, base?: string | URL, opts?: Options)\n constructor(input: string | URL, opts?: Options)\n constructor(\n input: string | URL,\n baseOrOpts?: string | URL | Options,\n opts?: Options\n ) {\n let base: undefined | string | URL\n let options: Options\n\n if (\n (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts) ||\n typeof baseOrOpts === 'string'\n ) {\n base = baseOrOpts\n options = opts || {}\n } else {\n options = opts || baseOrOpts || {}\n }\n\n this[Internal] = {\n url: parseURL(input, base ?? options.base),\n options: options,\n basePath: '',\n }\n\n this.analyze()\n }\n\n private analyze() {\n const info = getNextPathnameInfo(this[Internal].url.pathname, {\n nextConfig: this[Internal].options.nextConfig,\n parseData: !process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,\n i18nProvider: this[Internal].options.i18nProvider,\n })\n\n const hostname = getHostname(\n this[Internal].url,\n this[Internal].options.headers\n )\n this[Internal].domainLocale = this[Internal].options.i18nProvider\n ? this[Internal].options.i18nProvider.detectDomainLocale(hostname)\n : detectDomainLocale(\n this[Internal].options.nextConfig?.i18n?.domains,\n hostname\n )\n\n const defaultLocale =\n this[Internal].domainLocale?.defaultLocale ||\n this[Internal].options.nextConfig?.i18n?.defaultLocale\n\n this[Internal].url.pathname = info.pathname\n this[Internal].defaultLocale = defaultLocale\n this[Internal].basePath = info.basePath ?? ''\n this[Internal].buildId = info.buildId\n this[Internal].locale = info.locale ?? defaultLocale\n this[Internal].trailingSlash = info.trailingSlash\n }\n\n private formatPathname() {\n return formatNextPathnameInfo({\n basePath: this[Internal].basePath,\n buildId: this[Internal].buildId,\n defaultLocale: !this[Internal].options.forceLocale\n ? this[Internal].defaultLocale\n : undefined,\n locale: this[Internal].locale,\n pathname: this[Internal].url.pathname,\n trailingSlash: this[Internal].trailingSlash,\n })\n }\n\n private formatSearch() {\n return this[Internal].url.search\n }\n\n public get buildId() {\n return this[Internal].buildId\n }\n\n public set buildId(buildId: string | undefined) {\n this[Internal].buildId = buildId\n }\n\n public get locale() {\n return this[Internal].locale ?? ''\n }\n\n public set locale(locale: string) {\n if (\n !this[Internal].locale ||\n !this[Internal].options.nextConfig?.i18n?.locales.includes(locale)\n ) {\n throw new TypeError(\n `The NextURL configuration includes no locale \"${locale}\"`\n )\n }\n\n this[Internal].locale = locale\n }\n\n get defaultLocale() {\n return this[Internal].defaultLocale\n }\n\n get domainLocale() {\n return this[Internal].domainLocale\n }\n\n get searchParams() {\n return this[Internal].url.searchParams\n }\n\n get host() {\n return this[Internal].url.host\n }\n\n set host(value: string) {\n this[Internal].url.host = value\n }\n\n get hostname() {\n return this[Internal].url.hostname\n }\n\n set hostname(value: string) {\n this[Internal].url.hostname = value\n }\n\n get port() {\n return this[Internal].url.port\n }\n\n set port(value: string) {\n this[Internal].url.port = value\n }\n\n get protocol() {\n return this[Internal].url.protocol\n }\n\n set protocol(value: string) {\n this[Internal].url.protocol = value\n }\n\n get href() {\n const pathname = this.formatPathname()\n const search = this.formatSearch()\n return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`\n }\n\n set href(url: string) {\n this[Internal].url = parseURL(url)\n this.analyze()\n }\n\n get origin() {\n return this[Internal].url.origin\n }\n\n get pathname() {\n return this[Internal].url.pathname\n }\n\n set pathname(value: string) {\n this[Internal].url.pathname = value\n }\n\n get hash() {\n return this[Internal].url.hash\n }\n\n set hash(value: string) {\n this[Internal].url.hash = value\n }\n\n get search() {\n return this[Internal].url.search\n }\n\n set search(value: string) {\n this[Internal].url.search = value\n }\n\n get password() {\n return this[Internal].url.password\n }\n\n set password(value: string) {\n this[Internal].url.password = value\n }\n\n get username() {\n return this[Internal].url.username\n }\n\n set username(value: string) {\n this[Internal].url.username = value\n }\n\n get basePath() {\n return this[Internal].basePath\n }\n\n set basePath(value: string) {\n this[Internal].basePath = value.startsWith('/') ? value : `/${value}`\n }\n\n toString() {\n return this.href\n }\n\n toJSON() {\n return this.href\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n href: this.href,\n origin: this.origin,\n protocol: this.protocol,\n username: this.username,\n password: this.password,\n host: this.host,\n hostname: this.hostname,\n port: this.port,\n pathname: this.pathname,\n search: this.search,\n searchParams: this.searchParams,\n hash: this.hash,\n }\n }\n\n clone() {\n return new NextURL(String(this), this[Internal].options)\n }\n}\n","import { normalizeLocalePath } from '../../i18n/normalize-locale-path'\nimport { removePathPrefix } from './remove-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\nimport type { I18NProvider } from '../../../../server/lib/i18n-provider'\n\nexport interface NextPathnameInfo {\n /**\n * The base path in case the pathname included it.\n */\n basePath?: string\n /**\n * The buildId for when the parsed URL is a data URL. Parsing it can be\n * disabled with the `parseData` option.\n */\n buildId?: string\n /**\n * If there was a locale in the pathname, this will hold its value.\n */\n locale?: string\n /**\n * The processed pathname without a base path, locale, or data URL elements\n * when parsing it is enabled.\n */\n pathname: string\n /**\n * A boolean telling if the pathname had a trailingSlash. This can be only\n * true if trailingSlash is enabled.\n */\n trailingSlash?: boolean\n}\n\ninterface Options {\n /**\n * When passed to true, this function will also parse Nextjs data URLs.\n */\n parseData?: boolean\n /**\n * A partial of the Next.js configuration to parse the URL.\n */\n nextConfig?: {\n basePath?: string\n i18n?: { locales?: readonly string[] } | null\n trailingSlash?: boolean\n }\n\n /**\n * If provided, this normalizer will be used to detect the locale instead of\n * the default locale detection.\n */\n i18nProvider?: I18NProvider\n}\n\nexport function getNextPathnameInfo(\n pathname: string,\n options: Options\n): NextPathnameInfo {\n const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}\n const info: NextPathnameInfo = {\n pathname,\n trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash,\n }\n\n if (basePath && pathHasPrefix(info.pathname, basePath)) {\n info.pathname = removePathPrefix(info.pathname, basePath)\n info.basePath = basePath\n }\n let pathnameNoDataPrefix = info.pathname\n\n if (\n info.pathname.startsWith('/_next/data/') &&\n info.pathname.endsWith('.json')\n ) {\n const paths = info.pathname\n .replace(/^\\/_next\\/data\\//, '')\n .replace(/\\.json$/, '')\n .split('/')\n\n const buildId = paths[0]\n info.buildId = buildId\n pathnameNoDataPrefix =\n paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'\n\n // update pathname with normalized if enabled although\n // we use normalized to populate locale info still\n if (options.parseData === true) {\n info.pathname = pathnameNoDataPrefix\n }\n }\n\n // If provided, use the locale route normalizer to detect the locale instead\n // of the function below.\n if (i18n) {\n let result = options.i18nProvider\n ? options.i18nProvider.analyze(info.pathname)\n : normalizeLocalePath(info.pathname, i18n.locales)\n\n info.locale = result.detectedLocale\n info.pathname = result.pathname ?? info.pathname\n\n if (!result.detectedLocale && info.buildId) {\n result = options.i18nProvider\n ? options.i18nProvider.analyze(pathnameNoDataPrefix)\n : normalizeLocalePath(pathnameNoDataPrefix, i18n.locales)\n\n if (result.detectedLocale) {\n info.locale = result.detectedLocale\n }\n }\n }\n return info\n}\n","import { pathHasPrefix } from './path-has-prefix'\n\n/**\n * Given a path and a prefix it will remove the prefix when it exists in the\n * given path. It ensures it matches exactly without containing extra chars\n * and if the prefix is not there it will be noop.\n *\n * @param path The path to remove the prefix from.\n * @param prefix The prefix to be removed.\n */\nexport function removePathPrefix(path: string, prefix: string): string {\n // If the path doesn't start with the prefix we can return it as is. This\n // protects us from situations where the prefix is a substring of the path\n // prefix such as:\n //\n // For prefix: /blog\n //\n // /blog -> true\n // /blog/ -> true\n // /blog/1 -> true\n // /blogging -> false\n // /blogging/ -> false\n // /blogging/1 -> false\n if (!pathHasPrefix(path, prefix)) {\n return path\n }\n\n // Remove the prefix from the path via slicing.\n const withoutPrefix = path.slice(prefix.length)\n\n // If the path without the prefix starts with a `/` we can return it as is.\n if (withoutPrefix.startsWith('/')) {\n return withoutPrefix\n }\n\n // If the path without the prefix doesn't start with a `/` we need to add it\n // back to the path to make sure it's a valid path.\n return `/${withoutPrefix}`\n}\n","import type { OutgoingHttpHeaders } from 'http'\n\n/**\n * Takes an object with a hostname property (like a parsed URL) and some\n * headers that may contain Host and returns the preferred hostname.\n * @param parsed An object containing a hostname property.\n * @param headers A dictionary with headers containing a `host`.\n */\nexport function getHostname(\n parsed: { hostname?: string | null },\n headers?: OutgoingHttpHeaders\n): string | undefined {\n // Get the hostname from the headers if it exists, otherwise use the parsed\n // hostname.\n let hostname: string\n if (headers?.host && !Array.isArray(headers.host)) {\n hostname = headers.host.toString().split(':', 1)[0]\n } else if (parsed.hostname) {\n hostname = parsed.hostname\n } else return\n\n return hostname.toLowerCase()\n}\n","import type { DomainLocale } from '../../../server/config-shared'\n\nexport function detectDomainLocale(\n domainItems?: readonly DomainLocale[],\n hostname?: string,\n detectedLocale?: string\n) {\n if (!domainItems) return\n\n if (detectedLocale) {\n detectedLocale = detectedLocale.toLowerCase()\n }\n\n for (const item of domainItems) {\n // remove port if present\n const domainHostname = item.domain?.split(':', 1)[0].toLowerCase()\n if (\n hostname === domainHostname ||\n detectedLocale === item.defaultLocale.toLowerCase() ||\n item.locales?.some((locale) => locale.toLowerCase() === detectedLocale)\n ) {\n return item\n }\n }\n}\n","import type { NextPathnameInfo } from './get-next-pathname-info'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { addPathPrefix } from './add-path-prefix'\nimport { addPathSuffix } from './add-path-suffix'\nimport { addLocale } from './add-locale'\n\ninterface ExtendedInfo extends NextPathnameInfo {\n defaultLocale?: string\n ignorePrefix?: boolean\n}\n\nexport function formatNextPathnameInfo(info: ExtendedInfo) {\n let pathname = addLocale(\n info.pathname,\n info.locale,\n info.buildId ? undefined : info.defaultLocale,\n info.ignorePrefix\n )\n\n if (info.buildId || !info.trailingSlash) {\n pathname = removeTrailingSlash(pathname)\n }\n\n if (info.buildId) {\n pathname = addPathSuffix(\n addPathPrefix(pathname, `/_next/data/${info.buildId}`),\n info.pathname === '/' ? 'index.json' : '.json'\n )\n }\n\n pathname = addPathPrefix(pathname, info.basePath)\n return !info.buildId && info.trailingSlash\n ? !pathname.endsWith('/')\n ? addPathSuffix(pathname, '/')\n : pathname\n : removeTrailingSlash(pathname)\n}\n","import { addPathPrefix } from './add-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\n\n/**\n * For a given path and a locale, if the locale is given, it will prefix the\n * locale. The path shouldn't be an API path. If a default locale is given the\n * prefix will be omitted if the locale is already the default locale.\n */\nexport function addLocale(\n path: string,\n locale?: string | false,\n defaultLocale?: string,\n ignorePrefix?: boolean\n) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path\n\n const lower = path.toLowerCase()\n\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if (pathHasPrefix(lower, '/api')) return path\n if (pathHasPrefix(lower, `/${locale.toLowerCase()}`)) return path\n }\n\n // Add the locale prefix to the path.\n return addPathPrefix(path, `/${locale}`)\n}\n","import type { I18NConfig } from '../../config-shared'\nimport { NextURL } from '../next-url'\nimport { toNodeOutgoingHttpHeaders, validateURL } from '../utils'\nimport { RemovedUAError, RemovedPageError } from '../error'\nimport { RequestCookies } from './cookies'\n\nexport const INTERNALS = Symbol('internal request')\n\n/**\n * This class extends the [Web `Request` API](https://developer.mozilla.org/docs/Web/API/Request) with additional convenience methods.\n *\n * Read more: [Next.js Docs: `NextRequest`](https://nextjs.org/docs/app/api-reference/functions/next-request)\n */\nexport class NextRequest extends Request {\n [INTERNALS]: {\n cookies: RequestCookies\n url: string\n nextUrl: NextURL\n }\n\n constructor(input: URL | RequestInfo, init: RequestInit = {}) {\n const url =\n typeof input !== 'string' && 'url' in input ? input.url : String(input)\n validateURL(url)\n if (input instanceof Request) super(input, init)\n else super(url, init)\n const nextUrl = new NextURL(url, {\n headers: toNodeOutgoingHttpHeaders(this.headers),\n nextConfig: init.nextConfig,\n })\n this[INTERNALS] = {\n cookies: new RequestCookies(this.headers),\n nextUrl,\n url: process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ? url\n : nextUrl.toString(),\n }\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n cookies: this.cookies,\n nextUrl: this.nextUrl,\n url: this.url,\n // rest of props come from Request\n bodyUsed: this.bodyUsed,\n cache: this.cache,\n credentials: this.credentials,\n destination: this.destination,\n headers: Object.fromEntries(this.headers),\n integrity: this.integrity,\n keepalive: this.keepalive,\n method: this.method,\n mode: this.mode,\n redirect: this.redirect,\n referrer: this.referrer,\n referrerPolicy: this.referrerPolicy,\n signal: this.signal,\n }\n }\n\n public get cookies() {\n return this[INTERNALS].cookies\n }\n\n public get nextUrl() {\n return this[INTERNALS].nextUrl\n }\n\n /**\n * @deprecated\n * `page` has been deprecated in favour of `URLPattern`.\n * Read more: https://nextjs.org/docs/messages/middleware-request-page\n */\n public get page() {\n throw new RemovedPageError()\n }\n\n /**\n * @deprecated\n * `ua` has been removed in favour of \\`userAgent\\` function.\n * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n */\n public get ua() {\n throw new RemovedUAError()\n }\n\n public get url() {\n return this[INTERNALS].url\n }\n}\n\nexport interface RequestInit extends globalThis.RequestInit {\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n signal?: AbortSignal\n}\n","import type { BaseNextRequest } from '../../../base-http'\nimport type { NodeNextRequest } from '../../../base-http/node'\nimport type { WebNextRequest } from '../../../base-http/web'\nimport type { Writable } from 'node:stream'\n\nimport { getRequestMeta } from '../../../request-meta'\nimport { fromNodeOutgoingHttpHeaders } from '../../utils'\nimport { NextRequest } from '../request'\nimport { isNodeNextRequest, isWebNextRequest } from '../../../base-http/helpers'\n\nexport const ResponseAbortedName = 'ResponseAborted'\nexport class ResponseAborted extends Error {\n public readonly name = ResponseAbortedName\n}\n\n/**\n * Creates an AbortController tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * If the `close` event is fired before the `finish` event, then we'll send the\n * `abort` signal.\n */\nexport function createAbortController(response: Writable): AbortController {\n const controller = new AbortController()\n\n // If `finish` fires first, then `res.end()` has been called and the close is\n // just us finishing the stream on our side. If `close` fires first, then we\n // know the client disconnected before we finished.\n response.once('close', () => {\n if (response.writableFinished) return\n\n controller.abort(new ResponseAborted())\n })\n\n return controller\n}\n\n/**\n * Creates an AbortSignal tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * This cannot be done with the request (IncomingMessage or Readable) because\n * the `abort` event will not fire if to data has been fully read (because that\n * will \"close\" the readable stream and nothing fires after that).\n */\nexport function signalFromNodeResponse(response: Writable): AbortSignal {\n const { errored, destroyed } = response\n if (errored || destroyed) {\n return AbortSignal.abort(errored ?? new ResponseAborted())\n }\n\n const { signal } = createAbortController(response)\n return signal\n}\n\nexport class NextRequestAdapter {\n public static fromBaseNextRequest(\n request: BaseNextRequest,\n signal: AbortSignal\n ): NextRequest {\n if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME === 'edge' &&\n isWebNextRequest(request)\n ) {\n return NextRequestAdapter.fromWebNextRequest(request)\n } else if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME !== 'edge' &&\n isNodeNextRequest(request)\n ) {\n return NextRequestAdapter.fromNodeNextRequest(request, signal)\n } else {\n throw new Error('Invariant: Unsupported NextRequest type')\n }\n }\n\n public static fromNodeNextRequest(\n request: NodeNextRequest,\n signal: AbortSignal\n ): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: BodyInit | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) {\n // @ts-expect-error - this is handled by undici, when streams/web land use it instead\n body = request.body\n }\n\n let url: URL\n if (request.url.startsWith('http')) {\n url = new URL(request.url)\n } else {\n // Grab the full URL from the request metadata.\n const base = getRequestMeta(request, 'initURL')\n if (!base || !base.startsWith('http')) {\n // Because the URL construction relies on the fact that the URL provided\n // is absolute, we need to provide a base URL. We can't use the request\n // URL because it's relative, so we use a dummy URL instead.\n url = new URL(request.url, 'http://n')\n } else {\n url = new URL(request.url, base)\n }\n }\n\n return new NextRequest(url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n // @ts-expect-error - see https://github.com/whatwg/fetch/pull/1457\n duplex: 'half',\n signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n\n public static fromWebNextRequest(request: WebNextRequest): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: ReadableStream | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD') {\n body = request.body\n }\n\n return new NextRequest(request.url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n // @ts-expect-error - see https://github.com/whatwg/fetch/pull/1457\n duplex: 'half',\n signal: request.request.signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(request.request.signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n}\n","// Combined load times for loading client components\nlet clientComponentLoadStart = 0\nlet clientComponentLoadTimes = 0\nlet clientComponentLoadCount = 0\n\nexport function wrapClientComponentLoader(ComponentMod: any) {\n if (!('performance' in globalThis)) {\n return ComponentMod.__next_app__\n }\n\n return {\n require: (...args: any[]) => {\n const startTime = performance.now()\n\n if (clientComponentLoadStart === 0) {\n clientComponentLoadStart = startTime\n }\n\n try {\n clientComponentLoadCount += 1\n return ComponentMod.__next_app__.require(...args)\n } finally {\n clientComponentLoadTimes += performance.now() - startTime\n }\n },\n loadChunk: (...args: any[]) => {\n const startTime = performance.now()\n try {\n return ComponentMod.__next_app__.loadChunk(...args)\n } finally {\n clientComponentLoadTimes += performance.now() - startTime\n }\n },\n }\n}\n\nexport function getClientComponentLoaderMetrics(\n options: { reset?: boolean } = {}\n) {\n const metrics =\n clientComponentLoadStart === 0\n ? undefined\n : {\n clientComponentLoadStart,\n clientComponentLoadTimes,\n clientComponentLoadCount,\n }\n\n if (options.reset) {\n clientComponentLoadStart = 0\n clientComponentLoadTimes = 0\n clientComponentLoadCount = 0\n }\n\n return metrics\n}\n","import type { ServerResponse } from 'node:http'\n\nimport {\n ResponseAbortedName,\n createAbortController,\n} from './web/spec-extension/adapters/next-request'\nimport { DetachedPromise } from '../lib/detached-promise'\nimport { getTracer } from './lib/trace/tracer'\nimport { NextNodeServerSpan } from './lib/trace/constants'\nimport { getClientComponentLoaderMetrics } from './client-component-renderer-logger'\n\nexport function isAbortError(e: any): e is Error & { name: 'AbortError' } {\n return e?.name === 'AbortError' || e?.name === ResponseAbortedName\n}\n\nfunction createWriterFromResponse(\n res: ServerResponse,\n waitUntilForEnd?: Promise<unknown>\n): WritableStream<Uint8Array> {\n let started = false\n\n // Create a promise that will resolve once the response has drained. See\n // https://nodejs.org/api/stream.html#stream_event_drain\n let drained = new DetachedPromise<void>()\n function onDrain() {\n drained.resolve()\n }\n res.on('drain', onDrain)\n\n // If the finish event fires, it means we shouldn't block and wait for the\n // drain event.\n res.once('close', () => {\n res.off('drain', onDrain)\n drained.resolve()\n })\n\n // Create a promise that will resolve once the response has finished. See\n // https://nodejs.org/api/http.html#event-finish_1\n const finished = new DetachedPromise<void>()\n res.once('finish', () => {\n finished.resolve()\n })\n\n // Create a writable stream that will write to the response.\n return new WritableStream<Uint8Array>({\n write: async (chunk) => {\n // You'd think we'd want to use `start` instead of placing this in `write`\n // but this ensures that we don't actually flush the headers until we've\n // started writing chunks.\n if (!started) {\n started = true\n\n if (\n 'performance' in globalThis &&\n process.env.NEXT_OTEL_PERFORMANCE_PREFIX\n ) {\n const metrics = getClientComponentLoaderMetrics()\n if (metrics) {\n performance.measure(\n `${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,\n {\n start: metrics.clientComponentLoadStart,\n end:\n metrics.clientComponentLoadStart +\n metrics.clientComponentLoadTimes,\n }\n )\n }\n }\n\n res.flushHeaders()\n getTracer().trace(\n NextNodeServerSpan.startResponse,\n {\n spanName: 'start response',\n },\n () => undefined\n )\n }\n\n try {\n const ok = res.write(chunk)\n\n // Added by the `compression` middleware, this is a function that will\n // flush the partially-compressed response to the client.\n if ('flush' in res && typeof res.flush === 'function') {\n res.flush()\n }\n\n // If the write returns false, it means there's some backpressure, so\n // wait until it's streamed before continuing.\n if (!ok) {\n await drained.promise\n\n // Reset the drained promise so that we can wait for the next drain event.\n drained = new DetachedPromise<void>()\n }\n } catch (err) {\n res.end()\n throw new Error('failed to write chunk to response', { cause: err })\n }\n },\n abort: (err) => {\n if (res.writableFinished) return\n\n res.destroy(err)\n },\n close: async () => {\n // if a waitUntil promise was passed, wait for it to resolve before\n // ending the response.\n if (waitUntilForEnd) {\n await waitUntilForEnd\n }\n\n if (res.writableFinished) return\n\n res.end()\n return finished.promise\n },\n })\n}\n\nexport async function pipeToNodeResponse(\n readable: ReadableStream<Uint8Array>,\n res: ServerResponse,\n waitUntilForEnd?: Promise<unknown>\n) {\n try {\n // If the response has already errored, then just return now.\n const { errored, destroyed } = res\n if (errored || destroyed) return\n\n // Create a new AbortController so that we can abort the readable if the\n // client disconnects.\n const controller = createAbortController(res)\n\n const writer = createWriterFromResponse(res, waitUntilForEnd)\n\n await readable.pipeTo(writer, { signal: controller.signal })\n } catch (err: any) {\n // If this isn't related to an abort error, re-throw it.\n if (isAbortError(err)) return\n\n throw new Error('failed to pipe response', { cause: err })\n }\n}\n","import type { OutgoingHttpHeaders, ServerResponse } from 'http'\nimport type { Revalidate } from './lib/revalidate'\nimport type { FetchMetrics } from './base-http'\n\nimport {\n chainStreams,\n streamFromBuffer,\n streamFromString,\n streamToBuffer,\n streamToString,\n} from './stream-utils/node-web-streams-helper'\nimport { isAbortError, pipeToNodeResponse } from './pipe-readable'\nimport type { RenderResumeDataCache } from './resume-data-cache/resume-data-cache'\n\ntype ContentTypeOption = string | undefined\n\nexport type AppPageRenderResultMetadata = {\n flightData?: Buffer\n revalidate?: Revalidate\n staticBailoutInfo?: {\n stack?: string\n description?: string\n }\n\n /**\n * The postponed state if the render had postponed and needs to be resumed.\n */\n postponed?: string\n\n /**\n * The headers to set on the response that were added by the render.\n */\n headers?: OutgoingHttpHeaders\n fetchTags?: string\n fetchMetrics?: FetchMetrics\n\n segmentData?: Map<string, Buffer>\n\n /**\n * In development, the cache is warmed up before the render. This is attached\n * to the metadata so that it can be used during the render.\n */\n devRenderResumeDataCache?: RenderResumeDataCache\n}\n\nexport type PagesRenderResultMetadata = {\n pageData?: any\n revalidate?: Revalidate\n assetQueryString?: string\n isNotFound?: boolean\n isRedirect?: boolean\n}\n\nexport type StaticRenderResultMetadata = {}\n\nexport type RenderResultMetadata = AppPageRenderResultMetadata &\n PagesRenderResultMetadata &\n StaticRenderResultMetadata\n\nexport type RenderResultResponse =\n | ReadableStream<Uint8Array>[]\n | ReadableStream<Uint8Array>\n | string\n | Buffer\n | null\n\nexport type RenderResultOptions<\n Metadata extends RenderResultMetadata = RenderResultMetadata,\n> = {\n contentType?: ContentTypeOption\n waitUntil?: Promise<unknown>\n metadata: Metadata\n}\n\nexport default class RenderResult<\n Metadata extends RenderResultMetadata = RenderResultMetadata,\n> {\n /**\n * The detected content type for the response. This is used to set the\n * `Content-Type` header.\n */\n public readonly contentType: ContentTypeOption\n\n /**\n * The metadata for the response. This is used to set the revalidation times\n * and other metadata.\n */\n public readonly metadata: Readonly<Metadata>\n\n /**\n * The response itself. This can be a string, a stream, or null. If it's a\n * string, then it's a static response. If it's a stream, then it's a\n * dynamic response. If it's null, then the response was not found or was\n * already sent.\n */\n private response: RenderResultResponse\n\n /**\n * Creates a new RenderResult instance from a static response.\n *\n * @param value the static response value\n * @returns a new RenderResult instance\n */\n public static fromStatic(value: string | Buffer) {\n return new RenderResult<StaticRenderResultMetadata>(value, { metadata: {} })\n }\n\n private readonly waitUntil?: Promise<unknown>\n\n constructor(\n response: RenderResultResponse,\n { contentType, waitUntil, metadata }: RenderResultOptions<Metadata>\n ) {\n this.response = response\n this.contentType = contentType\n this.metadata = metadata\n this.waitUntil = waitUntil\n }\n\n public assignMetadata(metadata: Metadata) {\n Object.assign(this.metadata, metadata)\n }\n\n /**\n * Returns true if the response is null. It can be null if the response was\n * not found or was already sent.\n */\n public get isNull(): boolean {\n return this.response === null\n }\n\n /**\n * Returns false if the response is a string. It can be a string if the page\n * was prerendered. If it's not, then it was generated dynamically.\n */\n public get isDynamic(): boolean {\n return typeof this.response !== 'string'\n }\n\n public toUnchunkedBuffer(stream?: false): Buffer\n public toUnchunkedBuffer(stream: true): Promise<Buffer>\n public toUnchunkedBuffer(stream = false): Promise<Buffer> | Buffer {\n if (this.response === null) {\n throw new Error('Invariant: null responses cannot be unchunked')\n }\n\n if (typeof this.response !== 'string') {\n if (!stream) {\n throw new Error(\n 'Invariant: dynamic responses cannot be unchunked. This is a bug in Next.js'\n )\n }\n\n return streamToBuffer(this.readable)\n }\n\n return Buffer.from(this.response)\n }\n\n /**\n * Returns the response if it is a string. If the page was dynamic, this will\n * return a promise if the `stream` option is true, or it will throw an error.\n *\n * @param stream Whether or not to return a promise if the response is dynamic\n * @returns The response as a string\n */\n public toUnchunkedString(stream?: false): string\n public toUnchunkedString(stream: true): Promise<string>\n public toUnchunkedString(stream = false): Promise<string> | string {\n if (this.response === null) {\n throw new Error('Invariant: null responses cannot be unchunked')\n }\n\n if (typeof this.response !== 'string') {\n if (!stream) {\n throw new Error(\n 'Invariant: dynamic responses cannot be unchunked. This is a bug in Next.js'\n )\n }\n\n return streamToString(this.readable)\n }\n\n return this.response\n }\n\n /**\n * Returns the response if it is a stream, or throws an error if it is a\n * string.\n */\n private get readable(): ReadableStream<Uint8Array> {\n if (this.response === null) {\n throw new Error('Invariant: null responses cannot be streamed')\n }\n if (typeof this.response === 'string') {\n throw new Error('Invariant: static responses cannot be streamed')\n }\n\n if (Buffer.isBuffer(this.response)) {\n return streamFromBuffer(this.response)\n }\n\n // If the response is an array of streams, then chain them together.\n if (Array.isArray(this.response)) {\n return chainStreams(...this.response)\n }\n\n return this.response\n }\n\n /**\n * Chains a new stream to the response. This will convert the response to an\n * array of streams if it is not already one and will add the new stream to\n * the end. When this response is piped, all of the streams will be piped\n * one after the other.\n *\n * @param readable The new stream to chain\n */\n public chain(readable: ReadableStream<Uint8Array>) {\n if (this.response === null) {\n throw new Error('Invariant: response is null. This is a bug in Next.js')\n }\n\n // If the response is not an array of streams already, make it one.\n let responses: ReadableStream<Uint8Array>[]\n if (typeof this.response === 'string') {\n responses = [streamFromString(this.response)]\n } else if (Array.isArray(this.response)) {\n responses = this.response\n } else if (Buffer.isBuffer(this.response)) {\n responses = [streamFromBuffer(this.response)]\n } else {\n responses = [this.response]\n }\n\n // Add the new stream to the array.\n responses.push(readable)\n\n // Update the response.\n this.response = responses\n }\n\n /**\n * Pipes the response to a writable stream. This will close/cancel the\n * writable stream if an error is encountered. If this doesn't throw, then\n * the writable stream will be closed or aborted.\n *\n * @param writable Writable stream to pipe the response to\n */\n public async pipeTo(writable: WritableStream<Uint8Array>): Promise<void> {\n try {\n await this.readable.pipeTo(writable, {\n // We want to close the writable stream ourselves so that we can wait\n // for the waitUntil promise to resolve before closing it. If an error\n // is encountered, we'll abort the writable stream if we swallowed the\n // error.\n preventClose: true,\n })\n\n // If there is a waitUntil promise, wait for it to resolve before\n // closing the writable stream.\n if (this.waitUntil) await this.waitUntil\n\n // Close the writable stream.\n await writable.close()\n } catch (err) {\n // If this is an abort error, we should abort the writable stream (as we\n // took ownership of it when we started piping). We don't need to re-throw\n // because we handled the error.\n if (isAbortError(err)) {\n // Abort the writable stream if an error is encountered.\n await writable.abort(err)\n\n return\n }\n\n // We're not aborting the writer here as when this method throws it's not\n // clear as to how so the caller should assume it's their responsibility\n // to clean up the writer.\n throw err\n }\n }\n\n /**\n * Pipes the response to a node response. This will close/cancel the node\n * response if an error is encountered.\n *\n * @param res\n */\n public async pipeToNodeResponse(res: ServerResponse) {\n await pipeToNodeResponse(this.readable, res, this.waitUntil)\n }\n}\n","import type {\n WorkAsyncStorage,\n WorkStore,\n} from '../app-render/work-async-storage.external'\n\nimport { AppRenderSpan, NextNodeServerSpan } from './trace/constants'\nimport { getTracer, SpanKind } from './trace/tracer'\nimport {\n CACHE_ONE_YEAR,\n INFINITE_CACHE,\n NEXT_CACHE_TAG_MAX_ITEMS,\n NEXT_CACHE_TAG_MAX_LENGTH,\n} from '../../lib/constants'\nimport { markCurrentScopeAsDynamic } from '../app-render/dynamic-rendering'\nimport { makeHangingPromise } from '../dynamic-rendering-utils'\nimport type { FetchMetric } from '../base-http'\nimport { createDedupeFetch } from './dedupe-fetch'\nimport type {\n WorkUnitAsyncStorage,\n RequestStore,\n} from '../app-render/work-unit-async-storage.external'\nimport {\n CachedRouteKind,\n IncrementalCacheKind,\n type CachedFetchData,\n} from '../response-cache'\nimport { waitAtLeastOneReactRenderTask } from '../../lib/scheduler'\nimport { cloneResponse } from './clone-response'\n\nconst isEdgeRuntime = process.env.NEXT_RUNTIME === 'edge'\n\ntype Fetcher = typeof fetch\n\ntype PatchedFetcher = Fetcher & {\n readonly __nextPatched: true\n readonly __nextGetStaticStore: () => WorkAsyncStorage\n readonly _nextOriginalFetch: Fetcher\n}\n\nexport const NEXT_PATCH_SYMBOL = Symbol.for('next-patch')\n\nfunction isFetchPatched() {\n return (globalThis as Record<symbol, unknown>)[NEXT_PATCH_SYMBOL] === true\n}\n\nexport function validateRevalidate(\n revalidateVal: unknown,\n route: string\n): undefined | number {\n try {\n let normalizedRevalidate: number | undefined = undefined\n\n if (revalidateVal === false) {\n normalizedRevalidate = INFINITE_CACHE\n } else if (\n typeof revalidateVal === 'number' &&\n !isNaN(revalidateVal) &&\n revalidateVal > -1\n ) {\n normalizedRevalidate = revalidateVal\n } else if (typeof revalidateVal !== 'undefined') {\n throw new Error(\n `Invalid revalidate value \"${revalidateVal}\" on \"${route}\", must be a non-negative number or false`\n )\n }\n return normalizedRevalidate\n } catch (err: any) {\n // handle client component error from attempting to check revalidate value\n if (err instanceof Error && err.message.includes('Invalid revalidate')) {\n throw err\n }\n return undefined\n }\n}\n\nexport function validateTags(tags: any[], description: string) {\n const validTags: string[] = []\n const invalidTags: Array<{\n tag: any\n reason: string\n }> = []\n\n for (let i = 0; i < tags.length; i++) {\n const tag = tags[i]\n\n if (typeof tag !== 'string') {\n invalidTags.push({ tag, reason: 'invalid type, must be a string' })\n } else if (tag.length > NEXT_CACHE_TAG_MAX_LENGTH) {\n invalidTags.push({\n tag,\n reason: `exceeded max length of ${NEXT_CACHE_TAG_MAX_LENGTH}`,\n })\n } else {\n validTags.push(tag)\n }\n\n if (validTags.length > NEXT_CACHE_TAG_MAX_ITEMS) {\n console.warn(\n `Warning: exceeded max tag count for ${description}, dropped tags:`,\n tags.slice(i).join(', ')\n )\n break\n }\n }\n\n if (invalidTags.length > 0) {\n console.warn(`Warning: invalid tags passed to ${description}: `)\n\n for (const { tag, reason } of invalidTags) {\n console.log(`tag: \"${tag}\" ${reason}`)\n }\n }\n return validTags\n}\n\nfunction trackFetchMetric(\n workStore: WorkStore,\n ctx: Omit<FetchMetric, 'end' | 'idx'>\n) {\n // If the static generation store is not available, we can't track the fetch\n if (!workStore) return\n if (workStore.requestEndedState?.ended) return\n\n const isDebugBuild =\n (!!process.env.NEXT_DEBUG_BUILD ||\n process.env.NEXT_SSG_FETCH_METRICS === '1') &&\n workStore.isStaticGeneration\n const isDevelopment = process.env.NODE_ENV === 'development'\n\n if (\n // The only time we want to track fetch metrics outside of development is when\n // we are performing a static generation & we are in debug mode.\n !isDebugBuild &&\n !isDevelopment\n ) {\n return\n }\n\n workStore.fetchMetrics ??= []\n\n workStore.fetchMetrics.push({\n ...ctx,\n end: performance.timeOrigin + performance.now(),\n idx: workStore.nextFetchId || 0,\n })\n}\n\ninterface PatchableModule {\n workAsyncStorage: WorkAsyncStorage\n workUnitAsyncStorage: WorkUnitAsyncStorage\n}\n\nexport function createPatchedFetcher(\n originFetch: Fetcher,\n { workAsyncStorage, workUnitAsyncStorage }: PatchableModule\n): PatchedFetcher {\n // Create the patched fetch function. We don't set the type here, as it's\n // verified as the return value of this function.\n const patched = async (\n input: RequestInfo | URL,\n init: RequestInit | undefined\n ) => {\n let url: URL | undefined\n try {\n url = new URL(input instanceof Request ? input.url : input)\n url.username = ''\n url.password = ''\n } catch {\n // Error caused by malformed URL should be handled by native fetch\n url = undefined\n }\n const fetchUrl = url?.href ?? ''\n const method = init?.method?.toUpperCase() || 'GET'\n\n // Do create a new span trace for internal fetches in the\n // non-verbose mode.\n const isInternal = (init?.next as any)?.internal === true\n const hideSpan = process.env.NEXT_OTEL_FETCH_DISABLED === '1'\n // We don't track fetch metrics for internal fetches\n // so it's not critical that we have a start time, as it won't be recorded.\n // This is to workaround a flaky issue where performance APIs might\n // not be available and will require follow-up investigation.\n const fetchStart: number | undefined = isInternal\n ? undefined\n : performance.timeOrigin + performance.now()\n\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n // During static generation we track cache reads so we can reason about when they fill\n let cacheSignal =\n workUnitStore && workUnitStore.type === 'prerender'\n ? workUnitStore.cacheSignal\n : null\n if (cacheSignal) {\n cacheSignal.beginRead()\n }\n\n const result = getTracer().trace(\n isInternal ? NextNodeServerSpan.internalFetch : AppRenderSpan.fetch,\n {\n hideSpan,\n kind: SpanKind.CLIENT,\n spanName: ['fetch', method, fetchUrl].filter(Boolean).join(' '),\n attributes: {\n 'http.url': fetchUrl,\n 'http.method': method,\n 'net.peer.name': url?.hostname,\n 'net.peer.port': url?.port || undefined,\n },\n },\n async () => {\n // If this is an internal fetch, we should not do any special treatment.\n if (isInternal) {\n return originFetch(input, init)\n }\n\n // If the workStore is not available, we can't do any\n // special treatment of fetch, therefore fallback to the original\n // fetch implementation.\n if (!workStore) {\n return originFetch(input, init)\n }\n\n // We should also fallback to the original fetch implementation if we\n // are in draft mode, it does not constitute a static generation.\n if (workStore.isDraftMode) {\n return originFetch(input, init)\n }\n\n const isRequestInput =\n input &&\n typeof input === 'object' &&\n typeof (input as Request).method === 'string'\n\n const getRequestMeta = (field: string) => {\n // If request input is present but init is not, retrieve from input first.\n const value = (init as any)?.[field]\n return value || (isRequestInput ? (input as any)[field] : null)\n }\n\n let finalRevalidate: number | undefined = undefined\n const getNextField = (field: 'revalidate' | 'tags') => {\n return typeof init?.next?.[field] !== 'undefined'\n ? init?.next?.[field]\n : isRequestInput\n ? (input as any).next?.[field]\n : undefined\n }\n // RequestInit doesn't keep extra fields e.g. next so it's\n // only available if init is used separate\n let currentFetchRevalidate = getNextField('revalidate')\n const tags: string[] = validateTags(\n getNextField('tags') || [],\n `fetch ${input.toString()}`\n )\n\n const revalidateStore =\n workUnitStore &&\n (workUnitStore.type === 'cache' ||\n workUnitStore.type === 'prerender' ||\n workUnitStore.type === 'prerender-ppr' ||\n workUnitStore.type === 'prerender-legacy')\n ? workUnitStore\n : undefined\n\n if (revalidateStore) {\n if (Array.isArray(tags)) {\n // Collect tags onto parent caches or parent prerenders.\n const collectedTags =\n revalidateStore.tags ?? (revalidateStore.tags = [])\n for (const tag of tags) {\n if (!collectedTags.includes(tag)) {\n collectedTags.push(tag)\n }\n }\n }\n }\n\n const implicitTags =\n !workUnitStore || workUnitStore.type === 'unstable-cache'\n ? []\n : workUnitStore.implicitTags\n\n // Inside unstable-cache we treat it the same as force-no-store on the\n // page.\n const pageFetchCacheMode =\n workUnitStore && workUnitStore.type === 'unstable-cache'\n ? 'force-no-store'\n : workStore.fetchCache\n\n const isUsingNoStore = !!workStore.isUnstableNoStore\n\n let currentFetchCacheConfig = getRequestMeta('cache')\n let cacheReason = ''\n let cacheWarning: string | undefined\n\n if (\n typeof currentFetchCacheConfig === 'string' &&\n typeof currentFetchRevalidate !== 'undefined'\n ) {\n // If the revalidate value conflicts with the cache value, we should warn the user and unset the conflicting values.\n const isConflictingRevalidate =\n // revalidate: 0 and cache: force-cache\n (currentFetchCacheConfig === 'force-cache' &&\n currentFetchRevalidate === 0) ||\n // revalidate: >0 or revalidate: false and cache: no-store\n (currentFetchCacheConfig === 'no-store' &&\n (currentFetchRevalidate > 0 || currentFetchRevalidate === false))\n\n if (isConflictingRevalidate) {\n cacheWarning = `Specified \"cache: ${currentFetchCacheConfig}\" and \"revalidate: ${currentFetchRevalidate}\", only one should be specified.`\n currentFetchCacheConfig = undefined\n currentFetchRevalidate = undefined\n }\n }\n\n const hasExplicitFetchCacheOptOut =\n // fetch config itself signals not to cache\n currentFetchCacheConfig === 'no-cache' ||\n currentFetchCacheConfig === 'no-store' ||\n // the fetch isn't explicitly caching and the segment level cache config signals not to cache\n // note: `pageFetchCacheMode` is also set by being in an unstable_cache context.\n pageFetchCacheMode === 'force-no-store' ||\n pageFetchCacheMode === 'only-no-store'\n\n // If no explicit fetch cache mode is set, but dynamic = `force-dynamic` is set,\n // we shouldn't consider caching the fetch. This is because the `dynamic` cache\n // is considered a \"top-level\" cache mode, whereas something like `fetchCache` is more\n // fine-grained. Top-level modes are responsible for setting reasonable defaults for the\n // other configurations.\n const noFetchConfigAndForceDynamic =\n !pageFetchCacheMode &&\n !currentFetchCacheConfig &&\n !currentFetchRevalidate &&\n workStore.forceDynamic\n\n if (\n // force-cache was specified without a revalidate value. We set the revalidate value to false\n // which will signal the cache to not revalidate\n currentFetchCacheConfig === 'force-cache' &&\n typeof currentFetchRevalidate === 'undefined'\n ) {\n currentFetchRevalidate = false\n } else if (\n // if we are inside of \"use cache\"/\"unstable_cache\"\n // we shouldn't set the revalidate to 0 as it's overridden\n // by the cache context\n workUnitStore?.type !== 'cache' &&\n (hasExplicitFetchCacheOptOut || noFetchConfigAndForceDynamic)\n ) {\n currentFetchRevalidate = 0\n }\n\n if (\n currentFetchCacheConfig === 'no-cache' ||\n currentFetchCacheConfig === 'no-store'\n ) {\n cacheReason = `cache: ${currentFetchCacheConfig}`\n }\n\n finalRevalidate = validateRevalidate(\n currentFetchRevalidate,\n workStore.route\n )\n\n const _headers = getRequestMeta('headers')\n const initHeaders: Headers =\n typeof _headers?.get === 'function'\n ? _headers\n : new Headers(_headers || {})\n\n const hasUnCacheableHeader =\n initHeaders.get('authorization') || initHeaders.get('cookie')\n\n const isUnCacheableMethod = !['get', 'head'].includes(\n getRequestMeta('method')?.toLowerCase() || 'get'\n )\n\n /**\n * We automatically disable fetch caching under the following conditions:\n * - Fetch cache configs are not set. Specifically:\n * - A page fetch cache mode is not set (export const fetchCache=...)\n * - A fetch cache mode is not set in the fetch call (fetch(url, { cache: ... }))\n * or the fetch cache mode is set to 'default'\n * - A fetch revalidate value is not set in the fetch call (fetch(url, { revalidate: ... }))\n * - OR the fetch comes after a configuration that triggered dynamic rendering (e.g., reading cookies())\n * and the fetch was considered uncacheable (e.g., POST method or has authorization headers)\n */\n const hasNoExplicitCacheConfig =\n // eslint-disable-next-line eqeqeq\n pageFetchCacheMode == undefined &&\n // eslint-disable-next-line eqeqeq\n (currentFetchCacheConfig == undefined ||\n // when considering whether to opt into the default \"no-cache\" fetch semantics,\n // a \"default\" cache config should be treated the same as no cache config\n currentFetchCacheConfig === 'default') &&\n // eslint-disable-next-line eqeqeq\n currentFetchRevalidate == undefined\n const autoNoCache =\n // this condition is hit for null/undefined\n // eslint-disable-next-line eqeqeq\n (hasNoExplicitCacheConfig &&\n // we disable automatic no caching behavior during build time SSG so that we can still\n // leverage the fetch cache between SSG workers\n !workStore.isPrerendering) ||\n ((hasUnCacheableHeader || isUnCacheableMethod) &&\n revalidateStore &&\n revalidateStore.revalidate === 0)\n\n if (\n hasNoExplicitCacheConfig &&\n workUnitStore !== undefined &&\n workUnitStore.type === 'prerender'\n ) {\n // If we have no cache config, and we're in Dynamic I/O prerendering, it'll be a dynamic call.\n // We don't have to issue that dynamic call.\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n return makeHangingPromise<Response>(\n workUnitStore.renderSignal,\n 'fetch()'\n )\n }\n\n switch (pageFetchCacheMode) {\n case 'force-no-store': {\n cacheReason = 'fetchCache = force-no-store'\n break\n }\n case 'only-no-store': {\n if (\n currentFetchCacheConfig === 'force-cache' ||\n (typeof finalRevalidate !== 'undefined' && finalRevalidate > 0)\n ) {\n throw new Error(\n `cache: 'force-cache' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-no-store'`\n )\n }\n cacheReason = 'fetchCache = only-no-store'\n break\n }\n case 'only-cache': {\n if (currentFetchCacheConfig === 'no-store') {\n throw new Error(\n `cache: 'no-store' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-cache'`\n )\n }\n break\n }\n case 'force-cache': {\n if (\n typeof currentFetchRevalidate === 'undefined' ||\n currentFetchRevalidate === 0\n ) {\n cacheReason = 'fetchCache = force-cache'\n finalRevalidate = INFINITE_CACHE\n }\n break\n }\n default:\n // sometimes we won't match the above cases. the reason we don't move\n // everything to this switch is the use of autoNoCache which is not a fetchCacheMode\n // I suspect this could be unified with fetchCacheMode however in which case we could\n // simplify the switch case and ensure we have an exhaustive switch handling all modes\n }\n\n if (typeof finalRevalidate === 'undefined') {\n if (pageFetchCacheMode === 'default-cache' && !isUsingNoStore) {\n finalRevalidate = INFINITE_CACHE\n cacheReason = 'fetchCache = default-cache'\n } else if (pageFetchCacheMode === 'default-no-store') {\n finalRevalidate = 0\n cacheReason = 'fetchCache = default-no-store'\n } else if (isUsingNoStore) {\n finalRevalidate = 0\n cacheReason = 'noStore call'\n } else if (autoNoCache) {\n finalRevalidate = 0\n cacheReason = 'auto no cache'\n } else {\n // TODO: should we consider this case an invariant?\n cacheReason = 'auto cache'\n finalRevalidate = revalidateStore\n ? revalidateStore.revalidate\n : INFINITE_CACHE\n }\n } else if (!cacheReason) {\n cacheReason = `revalidate: ${finalRevalidate}`\n }\n\n if (\n // when force static is configured we don't bail from\n // `revalidate: 0` values\n !(workStore.forceStatic && finalRevalidate === 0) &&\n // we don't consider autoNoCache to switch to dynamic for ISR\n !autoNoCache &&\n // If the revalidate value isn't currently set or the value is less\n // than the current revalidate value, we should update the revalidate\n // value.\n revalidateStore &&\n finalRevalidate < revalidateStore.revalidate\n ) {\n // If we were setting the revalidate value to 0, we should try to\n // postpone instead first.\n if (finalRevalidate === 0) {\n if (workUnitStore && workUnitStore.type === 'prerender') {\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n return makeHangingPromise<Response>(\n workUnitStore.renderSignal,\n 'fetch()'\n )\n } else {\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `revalidate: 0 fetch ${input} ${workStore.route}`\n )\n }\n }\n\n // We only want to set the revalidate store's revalidate time if it\n // was explicitly set for the fetch call, i.e. currentFetchRevalidate.\n if (revalidateStore && currentFetchRevalidate === finalRevalidate) {\n revalidateStore.revalidate = finalRevalidate\n }\n }\n\n const isCacheableRevalidate =\n typeof finalRevalidate === 'number' && finalRevalidate > 0\n\n let cacheKey: string | undefined\n const { incrementalCache } = workStore\n\n const requestStore: undefined | RequestStore =\n workUnitStore !== undefined && workUnitStore.type === 'request'\n ? workUnitStore\n : undefined\n\n if (\n incrementalCache &&\n (isCacheableRevalidate || requestStore?.serverComponentsHmrCache)\n ) {\n try {\n cacheKey = await incrementalCache.generateCacheKey(\n fetchUrl,\n isRequestInput ? (input as RequestInit) : init\n )\n } catch (err) {\n console.error(`Failed to generate cache key for`, input)\n }\n }\n\n const fetchIdx = workStore.nextFetchId ?? 1\n workStore.nextFetchId = fetchIdx + 1\n\n let handleUnlock = () => Promise.resolve()\n\n const doOriginalFetch = async (\n isStale?: boolean,\n cacheReasonOverride?: string\n ) => {\n const requestInputFields = [\n 'cache',\n 'credentials',\n 'headers',\n 'integrity',\n 'keepalive',\n 'method',\n 'mode',\n 'redirect',\n 'referrer',\n 'referrerPolicy',\n 'window',\n 'duplex',\n\n // don't pass through signal when revalidating\n ...(isStale ? [] : ['signal']),\n ]\n\n if (isRequestInput) {\n const reqInput: Request = input as any\n const reqOptions: RequestInit = {\n body: (reqInput as any)._ogBody || reqInput.body,\n }\n\n for (const field of requestInputFields) {\n // @ts-expect-error custom fields\n reqOptions[field] = reqInput[field]\n }\n input = new Request(reqInput.url, reqOptions)\n } else if (init) {\n const { _ogBody, body, signal, ...otherInput } =\n init as RequestInit & { _ogBody?: any }\n init = {\n ...otherInput,\n body: _ogBody || body,\n signal: isStale ? undefined : signal,\n }\n }\n\n // add metadata to init without editing the original\n const clonedInit = {\n ...init,\n next: { ...init?.next, fetchType: 'origin', fetchIdx },\n }\n\n return originFetch(input, clonedInit)\n .then(async (res) => {\n if (!isStale && fetchStart) {\n trackFetchMetric(workStore, {\n start: fetchStart,\n url: fetchUrl,\n cacheReason: cacheReasonOverride || cacheReason,\n cacheStatus:\n finalRevalidate === 0 || cacheReasonOverride\n ? 'skip'\n : 'miss',\n cacheWarning,\n status: res.status,\n method: clonedInit.method || 'GET',\n })\n }\n if (\n res.status === 200 &&\n incrementalCache &&\n cacheKey &&\n (isCacheableRevalidate ||\n requestStore?.serverComponentsHmrCache)\n ) {\n const normalizedRevalidate =\n finalRevalidate >= INFINITE_CACHE\n ? CACHE_ONE_YEAR\n : finalRevalidate\n const externalRevalidate =\n finalRevalidate >= INFINITE_CACHE ? false : finalRevalidate\n\n if (workUnitStore && workUnitStore.type === 'prerender') {\n // We are prerendering at build time or revalidate time with dynamicIO so we need to\n // buffer the response so we can guarantee it can be read in a microtask\n const bodyBuffer = await res.arrayBuffer()\n\n const fetchedData = {\n headers: Object.fromEntries(res.headers.entries()),\n body: Buffer.from(bodyBuffer).toString('base64'),\n status: res.status,\n url: res.url,\n }\n\n // We can skip checking the serverComponentsHmrCache because we aren't in\n // dev mode.\n\n await incrementalCache.set(\n cacheKey,\n {\n kind: CachedRouteKind.FETCH,\n data: fetchedData,\n revalidate: normalizedRevalidate,\n },\n {\n fetchCache: true,\n revalidate: externalRevalidate,\n fetchUrl,\n fetchIdx,\n tags,\n }\n )\n await handleUnlock()\n\n // We return a new Response to the caller.\n return new Response(bodyBuffer, {\n headers: res.headers,\n status: res.status,\n statusText: res.statusText,\n })\n } else {\n // We're cloning the response using this utility because there\n // exists a bug in the undici library around response cloning.\n // See the following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n\n const [cloned1, cloned2] = cloneResponse(res)\n\n // We are dynamically rendering including dev mode. We want to return\n // the response to the caller as soon as possible because it might stream\n // over a very long time.\n cloned1\n .arrayBuffer()\n .then(async (arrayBuffer) => {\n const bodyBuffer = Buffer.from(arrayBuffer)\n\n const fetchedData = {\n headers: Object.fromEntries(cloned1.headers.entries()),\n body: bodyBuffer.toString('base64'),\n status: cloned1.status,\n url: cloned1.url,\n }\n\n requestStore?.serverComponentsHmrCache?.set(\n cacheKey,\n fetchedData\n )\n\n if (isCacheableRevalidate) {\n await incrementalCache.set(\n cacheKey,\n {\n kind: CachedRouteKind.FETCH,\n data: fetchedData,\n revalidate: normalizedRevalidate,\n },\n {\n fetchCache: true,\n revalidate: externalRevalidate,\n fetchUrl,\n fetchIdx,\n tags,\n }\n )\n }\n })\n .catch((error) =>\n console.warn(`Failed to set fetch cache`, input, error)\n )\n .finally(handleUnlock)\n\n return cloned2\n }\n }\n\n // we had response that we determined shouldn't be cached so we return it\n // and don't cache it. This also needs to unlock the cache lock we acquired.\n await handleUnlock()\n\n return res\n })\n .catch((error) => {\n handleUnlock()\n throw error\n })\n }\n\n let cacheReasonOverride\n let isForegroundRevalidate = false\n let isHmrRefreshCache = false\n\n if (cacheKey && incrementalCache) {\n let cachedFetchData: CachedFetchData | undefined\n\n if (\n requestStore?.isHmrRefresh &&\n requestStore.serverComponentsHmrCache\n ) {\n cachedFetchData =\n requestStore.serverComponentsHmrCache.get(cacheKey)\n\n isHmrRefreshCache = true\n }\n\n if (isCacheableRevalidate && !cachedFetchData) {\n handleUnlock = await incrementalCache.lock(cacheKey)\n const entry = workStore.isOnDemandRevalidate\n ? null\n : await incrementalCache.get(cacheKey, {\n kind: IncrementalCacheKind.FETCH,\n revalidate: finalRevalidate,\n fetchUrl,\n fetchIdx,\n tags,\n softTags: implicitTags,\n isFallback: false,\n })\n\n if (hasNoExplicitCacheConfig) {\n // We sometimes use the cache to dedupe fetches that do not specify a cache configuration\n // In these cases we want to make sure we still exclude them from prerenders if dynamicIO is on\n // so we introduce an artificial Task boundary here.\n if (workUnitStore && workUnitStore.type === 'prerender') {\n await waitAtLeastOneReactRenderTask()\n }\n }\n\n if (entry) {\n await handleUnlock()\n } else {\n // in dev, incremental cache response will be null in case the browser adds `cache-control: no-cache` in the request headers\n cacheReasonOverride = 'cache-control: no-cache (hard refresh)'\n }\n\n if (entry?.value && entry.value.kind === CachedRouteKind.FETCH) {\n // when stale and is revalidating we wait for fresh data\n // so the revalidated entry has the updated data\n if (workStore.isRevalidate && entry.isStale) {\n isForegroundRevalidate = true\n } else {\n if (entry.isStale) {\n workStore.pendingRevalidates ??= {}\n if (!workStore.pendingRevalidates[cacheKey]) {\n const pendingRevalidate = doOriginalFetch(true)\n .then(async (response) => ({\n body: await response.arrayBuffer(),\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n }))\n .finally(() => {\n workStore.pendingRevalidates ??= {}\n delete workStore.pendingRevalidates[cacheKey || '']\n })\n\n // Attach the empty catch here so we don't get a \"unhandled\n // promise rejection\" warning.\n pendingRevalidate.catch(console.error)\n\n workStore.pendingRevalidates[cacheKey] = pendingRevalidate\n }\n }\n\n cachedFetchData = entry.value.data\n }\n }\n }\n\n if (cachedFetchData) {\n if (fetchStart) {\n trackFetchMetric(workStore, {\n start: fetchStart,\n url: fetchUrl,\n cacheReason,\n cacheStatus: isHmrRefreshCache ? 'hmr' : 'hit',\n cacheWarning,\n status: cachedFetchData.status || 200,\n method: init?.method || 'GET',\n })\n }\n\n const response = new Response(\n Buffer.from(cachedFetchData.body, 'base64'),\n {\n headers: cachedFetchData.headers,\n status: cachedFetchData.status,\n }\n )\n\n Object.defineProperty(response, 'url', {\n value: cachedFetchData.url,\n })\n\n return response\n }\n }\n\n if (workStore.isStaticGeneration && init && typeof init === 'object') {\n const { cache } = init\n\n // Delete `cache` property as Cloudflare Workers will throw an error\n if (isEdgeRuntime) delete init.cache\n\n if (cache === 'no-store') {\n // If enabled, we should bail out of static generation.\n if (workUnitStore && workUnitStore.type === 'prerender') {\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n return makeHangingPromise<Response>(\n workUnitStore.renderSignal,\n 'fetch()'\n )\n } else {\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `no-store fetch ${input} ${workStore.route}`\n )\n }\n }\n\n const hasNextConfig = 'next' in init\n const { next = {} } = init\n if (\n typeof next.revalidate === 'number' &&\n revalidateStore &&\n next.revalidate < revalidateStore.revalidate\n ) {\n if (next.revalidate === 0) {\n // If enabled, we should bail out of static generation.\n if (workUnitStore && workUnitStore.type === 'prerender') {\n return makeHangingPromise<Response>(\n workUnitStore.renderSignal,\n 'fetch()'\n )\n } else {\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `revalidate: 0 fetch ${input} ${workStore.route}`\n )\n }\n }\n\n if (!workStore.forceStatic || next.revalidate !== 0) {\n revalidateStore.revalidate = next.revalidate\n }\n }\n if (hasNextConfig) delete init.next\n }\n\n // if we are revalidating the whole page via time or on-demand and\n // the fetch cache entry is stale we should still de-dupe the\n // origin hit if it's a cache-able entry\n if (cacheKey && isForegroundRevalidate) {\n const pendingRevalidateKey = cacheKey\n workStore.pendingRevalidates ??= {}\n let pendingRevalidate =\n workStore.pendingRevalidates[pendingRevalidateKey]\n\n if (pendingRevalidate) {\n const revalidatedResult: {\n body: ArrayBuffer\n headers: Headers\n status: number\n statusText: string\n } = await pendingRevalidate\n return new Response(revalidatedResult.body, {\n headers: revalidatedResult.headers,\n status: revalidatedResult.status,\n statusText: revalidatedResult.statusText,\n })\n }\n\n // We used to just resolve the Response and clone it however for\n // static generation with dynamicIO we need the response to be able to\n // be resolved in a microtask and cloning the response will never have\n // a body that can resolve in a microtask in node (as observed through\n // experimentation) So instead we await the body and then when it is\n // available we construct manually cloned Response objects with the\n // body as an ArrayBuffer. This will be resolvable in a microtask\n // making it compatible with dynamicIO.\n const pendingResponse = doOriginalFetch(true, cacheReasonOverride)\n // We're cloning the response using this utility because there\n // exists a bug in the undici library around response cloning.\n // See the following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n .then(cloneResponse)\n\n pendingRevalidate = pendingResponse\n .then(async (responses) => {\n const response = responses[0]\n return {\n body: await response.arrayBuffer(),\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n }\n })\n .finally(() => {\n // If the pending revalidate is not present in the store, then\n // we have nothing to delete.\n if (!workStore.pendingRevalidates?.[pendingRevalidateKey]) {\n return\n }\n\n delete workStore.pendingRevalidates[pendingRevalidateKey]\n })\n\n // Attach the empty catch here so we don't get a \"unhandled promise\n // rejection\" warning\n pendingRevalidate.catch(() => {})\n\n workStore.pendingRevalidates[pendingRevalidateKey] = pendingRevalidate\n\n return pendingResponse.then((responses) => responses[1])\n } else {\n return doOriginalFetch(false, cacheReasonOverride)\n }\n }\n )\n\n if (cacheSignal) {\n try {\n return await result\n } finally {\n if (cacheSignal) {\n cacheSignal.endRead()\n }\n }\n }\n return result\n }\n\n // Attach the necessary properties to the patched fetch function.\n // We don't use this to determine if the fetch function has been patched,\n // but for external consumers to determine if the fetch function has been\n // patched.\n patched.__nextPatched = true as const\n patched.__nextGetStaticStore = () => workAsyncStorage\n patched._nextOriginalFetch = originFetch\n ;(globalThis as Record<symbol, unknown>)[NEXT_PATCH_SYMBOL] = true\n\n return patched\n}\n// we patch fetch to collect cache information used for\n// determining if a page is static or not\nexport function patchFetch(options: PatchableModule) {\n // If we've already patched fetch, we should not patch it again.\n if (isFetchPatched()) return\n\n // Grab the original fetch function. We'll attach this so we can use it in\n // the patched fetch function.\n const original = createDedupeFetch(globalThis.fetch)\n\n // Set the global fetch to the patched fetch.\n globalThis.fetch = createPatchedFetcher(original, options)\n}\n","import { bold, green, magenta, red, yellow, white } from '../../lib/picocolors'\nimport { LRUCache } from '../../server/lib/lru-cache'\n\nexport const prefixes = {\n wait: white(bold('○')),\n error: red(bold('⨯')),\n warn: yellow(bold('⚠')),\n ready: '▲', // no color\n info: white(bold(' ')),\n event: green(bold('✓')),\n trace: magenta(bold('»')),\n} as const\n\nconst LOGGING_METHOD = {\n log: 'log',\n warn: 'warn',\n error: 'error',\n} as const\n\nfunction prefixedLog(prefixType: keyof typeof prefixes, ...message: any[]) {\n if ((message[0] === '' || message[0] === undefined) && message.length === 1) {\n message.shift()\n }\n\n const consoleMethod: keyof typeof LOGGING_METHOD =\n prefixType in LOGGING_METHOD\n ? LOGGING_METHOD[prefixType as keyof typeof LOGGING_METHOD]\n : 'log'\n\n const prefix = prefixes[prefixType]\n // If there's no message, don't print the prefix but a new line\n if (message.length === 0) {\n console[consoleMethod]('')\n } else {\n // Ensure if there's ANSI escape codes it's concatenated into one string.\n // Chrome DevTool can only handle color if it's in one string.\n if (message.length === 1 && typeof message[0] === 'string') {\n console[consoleMethod](' ' + prefix + ' ' + message[0])\n } else {\n console[consoleMethod](' ' + prefix, ...message)\n }\n }\n}\n\nexport function bootstrap(...message: string[]) {\n // logging format: ' <prefix> <message>'\n // e.g. ' ✓ Compiled successfully'\n // Add spaces to align with the indent of other logs\n console.log(' ' + message.join(' '))\n}\n\nexport function wait(...message: any[]) {\n prefixedLog('wait', ...message)\n}\n\nexport function error(...message: any[]) {\n prefixedLog('error', ...message)\n}\n\nexport function warn(...message: any[]) {\n prefixedLog('warn', ...message)\n}\n\nexport function ready(...message: any[]) {\n prefixedLog('ready', ...message)\n}\n\nexport function info(...message: any[]) {\n prefixedLog('info', ...message)\n}\n\nexport function event(...message: any[]) {\n prefixedLog('event', ...message)\n}\n\nexport function trace(...message: any[]) {\n prefixedLog('trace', ...message)\n}\n\nconst warnOnceCache = new LRUCache<string>(10_000, (value) => value.length)\nexport function warnOnce(...message: any[]) {\n const key = message.join(' ')\n if (!warnOnceCache.has(key)) {\n warnOnceCache.set(key, key)\n warn(...message)\n }\n}\n","export class LRUCache<T> {\n private cache: Map<string, T>\n private sizes: Map<string, number>\n private totalSize: number\n private maxSize: number\n private calculateSize: (value: T) => number\n\n constructor(maxSize: number, calculateSize?: (value: T) => number) {\n this.cache = new Map()\n this.sizes = new Map()\n this.totalSize = 0\n this.maxSize = maxSize\n this.calculateSize = calculateSize || (() => 1)\n }\n\n set(key?: string | null, value?: T): void {\n if (!key || !value) return\n\n const size = this.calculateSize(value)\n\n if (size > this.maxSize) {\n console.warn('Single item size exceeds maxSize')\n return\n }\n\n if (this.cache.has(key)) {\n this.totalSize -= this.sizes.get(key) || 0\n }\n\n this.cache.set(key, value)\n this.sizes.set(key, size)\n this.totalSize += size\n\n this.touch(key)\n }\n\n has(key?: string | null): boolean {\n if (!key) return false\n\n this.touch(key)\n return Boolean(this.cache.get(key))\n }\n\n get(key?: string | null): T | undefined {\n if (!key) return\n\n const value = this.cache.get(key)\n if (value === undefined) {\n return undefined\n }\n\n this.touch(key)\n return value\n }\n\n private touch(key: string): void {\n const value = this.cache.get(key)\n if (value !== undefined) {\n this.cache.delete(key)\n this.cache.set(key, value)\n this.evictIfNecessary()\n }\n }\n\n private evictIfNecessary(): void {\n while (this.totalSize > this.maxSize && this.cache.size > 0) {\n this.evictLeastRecentlyUsed()\n }\n }\n\n private evictLeastRecentlyUsed(): void {\n const lruKey = this.cache.keys().next().value\n if (lruKey !== undefined) {\n const lruSize = this.sizes.get(lruKey) || 0\n this.totalSize -= lruSize\n this.cache.delete(lruKey)\n this.sizes.delete(lruKey)\n }\n }\n\n reset() {\n this.cache.clear()\n this.sizes.clear()\n this.totalSize = 0\n }\n\n keys() {\n return [...this.cache.keys()]\n }\n\n remove(key: string): void {\n if (this.cache.has(key)) {\n this.totalSize -= this.sizes.get(key) || 0\n this.cache.delete(key)\n this.sizes.delete(key)\n }\n }\n\n clear(): void {\n this.cache.clear()\n this.sizes.clear()\n this.totalSize = 0\n }\n\n get size(): number {\n return this.cache.size\n }\n\n get currentSize(): number {\n return this.totalSize\n }\n}\n","import type { AppRouteHandlerFn, AppRouteHandlers } from '../module'\n\nimport { HTTP_METHODS, type HTTP_METHOD } from '../../../web/http'\n\nconst AUTOMATIC_ROUTE_METHODS = ['HEAD', 'OPTIONS'] as const\n\nfunction handleMethodNotAllowedResponse(): Response {\n return new Response(null, { status: 405 })\n}\n\nexport function autoImplementMethods(\n handlers: AppRouteHandlers\n): Record<HTTP_METHOD, AppRouteHandlerFn> {\n // Loop through all the HTTP methods to create the initial methods object.\n // Each of the methods will be set to the 405 response handler.\n const methods: Record<HTTP_METHOD, AppRouteHandlerFn> = HTTP_METHODS.reduce(\n (acc, method) => ({\n ...acc,\n // If the userland module implements the method, then use it. Otherwise,\n // use the 405 response handler.\n [method]: handlers[method] ?? handleMethodNotAllowedResponse,\n }),\n {} as Record<HTTP_METHOD, AppRouteHandlerFn>\n )\n\n // Get all the methods that could be automatically implemented that were not\n // implemented by the userland module.\n const implemented = new Set(HTTP_METHODS.filter((method) => handlers[method]))\n const missing = AUTOMATIC_ROUTE_METHODS.filter(\n (method) => !implemented.has(method)\n )\n\n // Loop over the missing methods to automatically implement them if we can.\n for (const method of missing) {\n // If the userland module doesn't implement the HEAD method, then\n // we'll automatically implement it by calling the GET method (if it\n // exists).\n if (method === 'HEAD') {\n if (handlers.GET) {\n // Implement the HEAD method by calling the GET method.\n methods.HEAD = handlers.GET\n\n // Mark it as implemented.\n implemented.add('HEAD')\n }\n continue\n }\n\n // If OPTIONS is not provided then implement it.\n if (method === 'OPTIONS') {\n // TODO: check if HEAD is implemented, if so, use it to add more headers\n\n // Get all the methods that were implemented by the userland module.\n const allow: HTTP_METHOD[] = ['OPTIONS', ...implemented]\n\n // If the list of methods doesn't include HEAD, but it includes GET, then\n // add HEAD as it's automatically implemented.\n if (!implemented.has('HEAD') && implemented.has('GET')) {\n allow.push('HEAD')\n }\n\n // Sort and join the list with commas to create the `Allow` header. See:\n // https://httpwg.org/specs/rfc9110.html#field.allow\n const headers = { Allow: allow.sort().join(', ') }\n\n // Implement the OPTIONS method by returning a 204 response with the\n // `Allow` header.\n methods.OPTIONS = () => new Response(null, { status: 204, headers })\n\n // Mark this method as implemented.\n implemented.add('OPTIONS')\n\n continue\n }\n\n throw new Error(\n `Invariant: should handle all automatic implementable methods, got method: ${method}`\n )\n }\n\n return methods\n}\n","const invalidServerComponentReactHooks = [\n 'useDeferredValue',\n 'useEffect',\n 'useImperativeHandle',\n 'useInsertionEffect',\n 'useLayoutEffect',\n 'useReducer',\n 'useRef',\n 'useState',\n 'useSyncExternalStore',\n 'useTransition',\n 'experimental_useOptimistic',\n 'useOptimistic',\n]\n\nfunction setMessage(error: Error, message: string): void {\n error.message = message\n if (error.stack) {\n const lines = error.stack.split('\\n')\n lines[0] = message\n error.stack = lines.join('\\n')\n }\n}\n\n/**\n * Input:\n * Error: Something went wrong\n at funcName (/path/to/file.js:10:5)\n at anotherFunc (/path/to/file.js:15:10)\n \n * Output:\n at funcName (/path/to/file.js:10:5)\n at anotherFunc (/path/to/file.js:15:10) \n */\nexport function getStackWithoutErrorMessage(error: Error): string {\n const stack = error.stack\n if (!stack) return ''\n return stack.replace(/^[^\\n]*\\n/, '')\n}\n\nexport function formatServerError(error: Error): void {\n if (typeof error?.message !== 'string') return\n\n if (\n error.message.includes(\n 'Class extends value undefined is not a constructor or null'\n )\n ) {\n const addedMessage =\n 'This might be caused by a React Class Component being rendered in a Server Component, React Class Components only works in Client Components. Read more: https://nextjs.org/docs/messages/class-component-in-server-component'\n\n // If this error instance already has the message, don't add it again\n if (error.message.includes(addedMessage)) return\n\n setMessage(\n error,\n `${error.message}\n\n${addedMessage}`\n )\n return\n }\n\n if (error.message.includes('createContext is not a function')) {\n setMessage(\n error,\n 'createContext only works in Client Components. Add the \"use client\" directive at the top of the file to use it. Read more: https://nextjs.org/docs/messages/context-in-server-component'\n )\n return\n }\n\n for (const clientHook of invalidServerComponentReactHooks) {\n const regex = new RegExp(`\\\\b${clientHook}\\\\b.*is not a function`)\n if (regex.test(error.message)) {\n setMessage(\n error,\n `${clientHook} only works in Client Components. Add the \"use client\" directive at the top of the file to use it. Read more: https://nextjs.org/docs/messages/react-client-hook-in-server-component`\n )\n return\n }\n }\n}\n","export const HTTPAccessErrorStatus = {\n NOT_FOUND: 404,\n FORBIDDEN: 403,\n UNAUTHORIZED: 401,\n}\n\nconst ALLOWED_CODES = new Set(Object.values(HTTPAccessErrorStatus))\n\nexport const HTTP_ERROR_FALLBACK_ERROR_CODE = 'NEXT_HTTP_ERROR_FALLBACK'\n\nexport type HTTPAccessFallbackError = Error & {\n digest: `${typeof HTTP_ERROR_FALLBACK_ERROR_CODE};${string}`\n}\n\n/**\n * Checks an error to determine if it's an error generated by\n * the HTTP navigation APIs `notFound()`, `forbidden()` or `unauthorized()`.\n *\n * @param error the error that may reference a HTTP access error\n * @returns true if the error is a HTTP access error\n */\nexport function isHTTPAccessFallbackError(\n error: unknown\n): error is HTTPAccessFallbackError {\n if (\n typeof error !== 'object' ||\n error === null ||\n !('digest' in error) ||\n typeof error.digest !== 'string'\n ) {\n return false\n }\n const [prefix, httpStatus] = error.digest.split(';')\n\n return (\n prefix === HTTP_ERROR_FALLBACK_ERROR_CODE &&\n ALLOWED_CODES.has(Number(httpStatus))\n )\n}\n\nexport function getAccessFallbackHTTPStatus(\n error: HTTPAccessFallbackError\n): number {\n const httpStatus = error.digest.split(';')[1]\n return Number(httpStatus)\n}\n\nexport function getAccessFallbackErrorTypeByStatus(\n status: number\n): 'not-found' | 'forbidden' | 'unauthorized' | undefined {\n switch (status) {\n case 401:\n return 'unauthorized'\n case 403:\n return 'forbidden'\n case 404:\n return 'not-found'\n default:\n return\n }\n}\n","export enum RedirectStatusCode {\n SeeOther = 303,\n TemporaryRedirect = 307,\n PermanentRedirect = 308,\n}\n","import { RedirectStatusCode } from './redirect-status-code'\n\nexport const REDIRECT_ERROR_CODE = 'NEXT_REDIRECT'\n\nexport enum RedirectType {\n push = 'push',\n replace = 'replace',\n}\n\nexport type RedirectError = Error & {\n digest: `${typeof REDIRECT_ERROR_CODE};${RedirectType};${string};${RedirectStatusCode};`\n}\n\n/**\n * Checks an error to determine if it's an error generated by the\n * `redirect(url)` helper.\n *\n * @param error the error that may reference a redirect error\n * @returns true if the error is a redirect error\n */\nexport function isRedirectError(error: unknown): error is RedirectError {\n if (\n typeof error !== 'object' ||\n error === null ||\n !('digest' in error) ||\n typeof error.digest !== 'string'\n ) {\n return false\n }\n\n const digest = error.digest.split(';')\n const [errorCode, type] = digest\n const destination = digest.slice(2, -2).join(';')\n const status = digest.at(-2)\n\n const statusCode = Number(status)\n\n return (\n errorCode === REDIRECT_ERROR_CODE &&\n (type === 'replace' || type === 'push') &&\n typeof destination === 'string' &&\n !isNaN(statusCode) &&\n statusCode in RedirectStatusCode\n )\n}\n","import { getDigestForWellKnownError } from './create-error-handler'\n\nexport function printDebugThrownValueForProspectiveRender(\n thrownValue: unknown,\n route: string\n) {\n // We don't need to print well-known Next.js errors.\n if (getDigestForWellKnownError(thrownValue)) {\n return\n }\n\n let message: undefined | string\n if (\n typeof thrownValue === 'object' &&\n thrownValue !== null &&\n typeof (thrownValue as any).message === 'string'\n ) {\n message = (thrownValue as any).message\n if (typeof (thrownValue as any).stack === 'string') {\n const originalErrorStack: string = (thrownValue as any).stack\n const stackStart = originalErrorStack.indexOf('\\n')\n if (stackStart > -1) {\n const error = new Error(\n `Route ${route} errored during the prospective render. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled.\n \nOriginal Error: ${message}`\n )\n error.stack =\n 'Error: ' + error.message + originalErrorStack.slice(stackStart)\n console.error(error)\n return\n }\n }\n } else if (typeof thrownValue === 'string') {\n message = thrownValue\n }\n\n if (message) {\n console.error(`Route ${route} errored during the prospective render. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. No stack was provided.\n \nOriginal Message: ${message}`)\n return\n }\n\n console.error(\n `Route ${route} errored during the prospective render. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. The thrown value is logged just following this message`\n )\n console.error(thrownValue)\n return\n}\n","import type { ErrorInfo } from 'react'\n\nimport stringHash from 'next/dist/compiled/string-hash'\nimport { formatServerError } from '../../lib/format-server-error'\nimport { SpanStatusCode, getTracer } from '../lib/trace/tracer'\nimport { isAbortError } from '../pipe-readable'\nimport { isBailoutToCSRError } from '../../shared/lib/lazy-dynamic/bailout-to-csr'\nimport { isDynamicServerError } from '../../client/components/hooks-server-context'\nimport { isNextRouterError } from '../../client/components/is-next-router-error'\nimport { getProperError } from '../../lib/is-error'\nimport { createDigestWithErrorCode } from '../../lib/error-telemetry-utils'\n\ndeclare global {\n var __next_log_error__: undefined | ((err: unknown) => void)\n}\n\ntype RSCErrorHandler = (err: unknown) => string | undefined\ntype SSRErrorHandler = (\n err: unknown,\n errorInfo?: ErrorInfo\n) => string | undefined\n\nexport type DigestedError = Error & { digest: string }\n\n/**\n * Returns a digest for well-known Next.js errors, otherwise `undefined`. If a\n * digest is returned this also means that the error does not need to be\n * reported.\n */\nexport function getDigestForWellKnownError(error: unknown): string | undefined {\n // If we're bailing out to CSR, we don't need to log the error.\n if (isBailoutToCSRError(error)) return error.digest\n\n // If this is a navigation error, we don't need to log the error.\n if (isNextRouterError(error)) return error.digest\n\n // If this error occurs, we know that we should be stopping the static\n // render. This is only thrown in static generation when PPR is not enabled,\n // which causes the whole page to be marked as dynamic. We don't need to\n // tell the user about this error, as it's not actionable.\n if (isDynamicServerError(error)) return error.digest\n\n return undefined\n}\n\nexport function createFlightReactServerErrorHandler(\n shouldFormatError: boolean,\n onReactServerRenderError: (err: DigestedError) => void\n): RSCErrorHandler {\n return (thrownValue: unknown) => {\n if (typeof thrownValue === 'string') {\n // TODO-APP: look at using webcrypto instead. Requires a promise to be awaited.\n return stringHash(thrownValue).toString()\n }\n\n // If the response was closed, we don't need to log the error.\n if (isAbortError(thrownValue)) return\n\n const digest = getDigestForWellKnownError(thrownValue)\n\n if (digest) {\n return digest\n }\n\n const err = getProperError(thrownValue) as DigestedError\n\n // If the error already has a digest, respect the original digest,\n // so it won't get re-generated into another new error.\n if (!err.digest) {\n // TODO-APP: look at using webcrypto instead. Requires a promise to be awaited.\n err.digest = stringHash(err.message + err.stack || '').toString()\n }\n\n // Format server errors in development to add more helpful error messages\n if (shouldFormatError) {\n formatServerError(err)\n }\n\n // Record exception in an active span, if available.\n const span = getTracer().getActiveScopeSpan()\n if (span) {\n span.recordException(err)\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n })\n }\n\n onReactServerRenderError(err)\n\n return createDigestWithErrorCode(thrownValue, err.digest)\n }\n}\n\nexport function createHTMLReactServerErrorHandler(\n shouldFormatError: boolean,\n isNextExport: boolean,\n reactServerErrors: Map<string, DigestedError>,\n silenceLogger: boolean,\n onReactServerRenderError: undefined | ((err: DigestedError) => void)\n): RSCErrorHandler {\n return (thrownValue: unknown) => {\n if (typeof thrownValue === 'string') {\n // TODO-APP: look at using webcrypto instead. Requires a promise to be awaited.\n return stringHash(thrownValue).toString()\n }\n\n // If the response was closed, we don't need to log the error.\n if (isAbortError(thrownValue)) return\n\n const digest = getDigestForWellKnownError(thrownValue)\n\n if (digest) {\n return digest\n }\n\n const err = getProperError(thrownValue) as DigestedError\n\n // If the error already has a digest, respect the original digest,\n // so it won't get re-generated into another new error.\n if (!err.digest) {\n // TODO-APP: look at using webcrypto instead. Requires a promise to be awaited.\n err.digest = stringHash(err.message + (err.stack || '')).toString()\n }\n\n // @TODO by putting this here and not at the top it is possible that\n // we don't error the build in places we actually expect to\n if (!reactServerErrors.has(err.digest)) {\n reactServerErrors.set(err.digest, err)\n }\n\n // Format server errors in development to add more helpful error messages\n if (shouldFormatError) {\n formatServerError(err)\n }\n\n // Don't log the suppressed error during export\n if (\n !(\n isNextExport &&\n err?.message?.includes(\n 'The specific message is omitted in production builds to avoid leaking sensitive details.'\n )\n )\n ) {\n // Record exception in an active span, if available.\n const span = getTracer().getActiveScopeSpan()\n if (span) {\n span.recordException(err)\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n })\n }\n\n if (!silenceLogger) {\n onReactServerRenderError?.(err)\n }\n }\n\n return createDigestWithErrorCode(thrownValue, err.digest)\n }\n}\n\nexport function createHTMLErrorHandler(\n shouldFormatError: boolean,\n isNextExport: boolean,\n reactServerErrors: Map<string, DigestedError>,\n allCapturedErrors: Array<unknown>,\n silenceLogger: boolean,\n onHTMLRenderSSRError: (err: DigestedError, errorInfo?: ErrorInfo) => void\n): SSRErrorHandler {\n return (thrownValue: unknown, errorInfo?: ErrorInfo) => {\n let isSSRError = true\n\n allCapturedErrors.push(thrownValue)\n\n // If the response was closed, we don't need to log the error.\n if (isAbortError(thrownValue)) return\n\n const digest = getDigestForWellKnownError(thrownValue)\n\n if (digest) {\n return digest\n }\n\n const err = getProperError(thrownValue) as DigestedError\n // If the error already has a digest, respect the original digest,\n // so it won't get re-generated into another new error.\n if (err.digest) {\n if (reactServerErrors.has(err.digest)) {\n // This error is likely an obfuscated error from react-server.\n // We recover the original error here.\n thrownValue = reactServerErrors.get(err.digest)\n isSSRError = false\n } else {\n // The error is not from react-server but has a digest\n // from other means so we don't need to produce a new one\n }\n } else {\n err.digest = stringHash(\n err.message + (errorInfo?.componentStack || err.stack || '')\n ).toString()\n }\n\n // Format server errors in development to add more helpful error messages\n if (shouldFormatError) {\n formatServerError(err)\n }\n\n // Don't log the suppressed error during export\n if (\n !(\n isNextExport &&\n err?.message?.includes(\n 'The specific message is omitted in production builds to avoid leaking sensitive details.'\n )\n )\n ) {\n // Record exception in an active span, if available.\n const span = getTracer().getActiveScopeSpan()\n if (span) {\n span.recordException(err)\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n })\n }\n\n if (\n !silenceLogger &&\n // HTML errors contain RSC errors as well, filter them out before reporting\n isSSRError\n ) {\n onHTMLRenderSSRError(err, errorInfo)\n }\n }\n\n return createDigestWithErrorCode(thrownValue, err.digest)\n }\n}\n\nexport function isUserLandError(err: any): boolean {\n return (\n !isAbortError(err) && !isBailoutToCSRError(err) && !isNextRouterError(err)\n )\n}\n","// This has to be a shared module which is shared between client component error boundary and dynamic component\nconst BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING'\n\n/** An error that should be thrown when we want to bail out to client-side rendering. */\nexport class BailoutToCSRError extends Error {\n public readonly digest = BAILOUT_TO_CSR\n\n constructor(public readonly reason: string) {\n super(`Bail out to client-side rendering: ${reason}`)\n }\n}\n\n/** Checks if a passed argument is an error that is thrown if we want to bail out to client-side rendering. */\nexport function isBailoutToCSRError(err: unknown): err is BailoutToCSRError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === BAILOUT_TO_CSR\n}\n","import {\n isHTTPAccessFallbackError,\n type HTTPAccessFallbackError,\n} from './http-access-fallback/http-access-fallback'\nimport { isRedirectError, type RedirectError } from './redirect-error'\n\n/**\n * Returns true if the error is a navigation signal error. These errors are\n * thrown by user code to perform navigation operations and interrupt the React\n * render.\n */\nexport function isNextRouterError(\n error: unknown\n): error is RedirectError | HTTPAccessFallbackError {\n return isRedirectError(error) || isHTTPAccessFallbackError(error)\n}\n","'use client'\n\nimport type { FetchServerResponseResult } from '../../client/components/router-reducer/fetch-server-response'\nimport type {\n FocusAndScrollRef,\n PrefetchKind,\n RouterChangeByServerResponse,\n} from '../../client/components/router-reducer/router-reducer-types'\nimport type {\n FlightRouterState,\n FlightSegmentPath,\n} from '../../server/app-render/types'\nimport React from 'react'\n\nexport type ChildSegmentMap = Map<string, CacheNode>\n\n/**\n * Cache node used in app-router / layout-router.\n */\nexport type CacheNode = ReadyCacheNode | LazyCacheNode\n\nexport type LoadingModuleData =\n | [React.JSX.Element, React.ReactNode, React.ReactNode]\n | null\n\n/** viewport metadata node */\nexport type HeadData = React.ReactNode\n\nexport type LazyCacheNode = {\n /**\n * When rsc is null, this is a lazily-initialized cache node.\n *\n * If the app attempts to render it, it triggers a lazy data fetch,\n * postpones the render, and schedules an update to a new tree.\n *\n * TODO: This mechanism should not be used when PPR is enabled, though it\n * currently is in some cases until we've implemented partial\n * segment fetching.\n */\n rsc: null\n\n /**\n * A prefetched version of the segment data. See explanation in corresponding\n * field of ReadyCacheNode (below).\n *\n * Since LazyCacheNode mostly only exists in the non-PPR implementation, this\n * will usually be null, but it could have been cloned from a previous\n * CacheNode that was created by the PPR implementation. Eventually we want\n * to migrate everything away from LazyCacheNode entirely.\n */\n prefetchRsc: React.ReactNode\n\n /**\n * A pending response for the lazy data fetch. If this is not present\n * during render, it is lazily created.\n */\n lazyData: Promise<FetchServerResponseResult> | null\n\n prefetchHead: HeadData | null\n\n head: HeadData\n\n loading: LoadingModuleData | Promise<LoadingModuleData>\n\n /**\n * Child parallel routes.\n */\n parallelRoutes: Map<string, ChildSegmentMap>\n}\n\nexport type ReadyCacheNode = {\n /**\n * When rsc is not null, it represents the RSC data for the\n * corresponding segment.\n *\n * `null` is a valid React Node but because segment data is always a\n * <LayoutRouter> component, we can use `null` to represent empty.\n *\n * TODO: For additional type safety, update this type to\n * Exclude<React.ReactNode, null>. Need to update createEmptyCacheNode to\n * accept rsc as an argument, or just inline the callers.\n */\n rsc: React.ReactNode\n\n /**\n * Represents a static version of the segment that can be shown immediately,\n * and may or may not contain dynamic holes. It's prefetched before a\n * navigation occurs.\n *\n * During rendering, we will choose whether to render `rsc` or `prefetchRsc`\n * with `useDeferredValue`. As with the `rsc` field, a value of `null` means\n * no value was provided. In this case, the LayoutRouter will go straight to\n * rendering the `rsc` value; if that one is also missing, it will suspend and\n * trigger a lazy fetch.\n */\n prefetchRsc: React.ReactNode\n\n /**\n * There should never be a lazy data request in this case.\n */\n lazyData: null\n prefetchHead: HeadData | null\n\n head: HeadData\n\n loading: LoadingModuleData | Promise<LoadingModuleData>\n\n parallelRoutes: Map<string, ChildSegmentMap>\n}\n\nexport interface NavigateOptions {\n scroll?: boolean\n}\n\nexport interface PrefetchOptions {\n kind: PrefetchKind\n}\n\nexport interface AppRouterInstance {\n /**\n * Navigate to the previous history entry.\n */\n back(): void\n /**\n * Navigate to the next history entry.\n */\n forward(): void\n /**\n * Refresh the current page.\n */\n refresh(): void\n /**\n * Refresh the current page. Use in development only.\n * @internal\n */\n hmrRefresh(): void\n /**\n * Navigate to the provided href.\n * Pushes a new history entry.\n */\n push(href: string, options?: NavigateOptions): void\n /**\n * Navigate to the provided href.\n * Replaces the current history entry.\n */\n replace(href: string, options?: NavigateOptions): void\n /**\n * Prefetch the provided href.\n */\n prefetch(href: string, options?: PrefetchOptions): void\n}\n\nexport const AppRouterContext = React.createContext<AppRouterInstance | null>(\n null\n)\nexport const LayoutRouterContext = React.createContext<{\n parentTree: FlightRouterState\n parentCacheNode: CacheNode\n parentSegmentPath: FlightSegmentPath | null\n url: string\n} | null>(null)\n\nexport const GlobalLayoutRouterContext = React.createContext<{\n tree: FlightRouterState\n changeByServerResponse: RouterChangeByServerResponse\n focusAndScrollRef: FocusAndScrollRef\n nextUrl: string | null\n}>(null as any)\n\nexport const TemplateContext = React.createContext<React.ReactNode>(null as any)\n\nif (process.env.NODE_ENV !== 'production') {\n AppRouterContext.displayName = 'AppRouterContext'\n LayoutRouterContext.displayName = 'LayoutRouterContext'\n GlobalLayoutRouterContext.displayName = 'GlobalLayoutRouterContext'\n TemplateContext.displayName = 'TemplateContext'\n}\n\nexport const MissingSlotContext = React.createContext<Set<string>>(new Set())\n","/**\n * This class is used to detect when all cache reads for a given render are settled.\n * We do this to allow for cache warming the prerender without having to continue rendering\n * the remainder of the page. This feature is really only useful when the dynamicIO flag is on\n * and should only be used in codepaths gated with this feature.\n */\n\nexport class CacheSignal {\n private count: number\n private earlyListeners: Array<() => void>\n private listeners: Array<() => void>\n private tickPending: boolean\n private taskPending: boolean\n\n constructor() {\n this.count = 0\n this.earlyListeners = []\n this.listeners = []\n this.tickPending = false\n this.taskPending = false\n }\n\n private noMorePendingCaches() {\n if (!this.tickPending) {\n this.tickPending = true\n process.nextTick(() => {\n this.tickPending = false\n if (this.count === 0) {\n for (let i = 0; i < this.earlyListeners.length; i++) {\n this.earlyListeners[i]()\n }\n this.earlyListeners.length = 0\n }\n })\n }\n if (!this.taskPending) {\n this.taskPending = true\n setTimeout(() => {\n this.taskPending = false\n if (this.count === 0) {\n for (let i = 0; i < this.listeners.length; i++) {\n this.listeners[i]()\n }\n this.listeners.length = 0\n }\n }, 0)\n }\n }\n\n /**\n * This promise waits until there are no more in progress cache reads but no later.\n * This allows for adding more cache reads after to delay cacheReady.\n */\n inputReady() {\n return new Promise<void>((resolve) => {\n this.earlyListeners.push(resolve)\n if (this.count === 0) {\n this.noMorePendingCaches()\n }\n })\n }\n\n /**\n * If there are inflight cache reads this Promise can resolve in a microtask however\n * if there are no inflight cache reads then we wait at least one task to allow initial\n * cache reads to be initiated.\n */\n cacheReady() {\n return new Promise<void>((resolve) => {\n this.listeners.push(resolve)\n if (this.count === 0) {\n this.noMorePendingCaches()\n }\n })\n }\n\n beginRead() {\n this.count++\n }\n\n endRead() {\n // If this is the last read we need to wait a task before we can claim the cache is settled.\n // The cache read will likely ping a Server Component which can read from the cache again and this\n // will play out in a microtask so we need to only resolve pending listeners if we're still at 0\n // after at least one task.\n // We only want one task scheduled at a time so when we hit count 1 we don't decrement the counter immediately.\n // If intervening reads happen before the scheduled task runs they will never observe count 1 preventing reentrency\n this.count--\n if (this.count === 0) {\n this.noMorePendingCaches()\n }\n }\n}\n","import { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport { afterTaskAsyncStorage } from '../app-render/after-task-async-storage.external'\n\n// This regex will have fast negatives meaning valid identifiers may not pass\n// this test. However this is only used during static generation to provide hints\n// about why a page bailed out of some or all prerendering and we can use bracket notation\n// for example while `ಠ_ಠ` is a valid identifier it's ok to print `searchParams['ಠ_ಠ']`\n// even if this would have been fine too `searchParams.ಠ_ಠ`\nconst isDefinitelyAValidIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/\n\nexport function describeStringPropertyAccess(target: string, prop: string) {\n if (isDefinitelyAValidIdentifier.test(prop)) {\n return `\\`${target}.${prop}\\``\n }\n return `\\`${target}[${JSON.stringify(prop)}]\\``\n}\n\nexport function describeHasCheckingStringProperty(\n target: string,\n prop: string\n) {\n const stringifiedProp = JSON.stringify(prop)\n return `\\`Reflect.has(${target}, ${stringifiedProp})\\`, \\`${stringifiedProp} in ${target}\\`, or similar`\n}\n\nexport function throwWithStaticGenerationBailoutError(\n route: string,\n expression: string\n): never {\n throw new StaticGenBailoutError(\n `Route ${route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n}\n\nexport function throwWithStaticGenerationBailoutErrorWithDynamicError(\n route: string,\n expression: string\n): never {\n throw new StaticGenBailoutError(\n `Route ${route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n}\n\nexport function isRequestAPICallableInsideAfter() {\n const afterTaskStore = afterTaskAsyncStorage.getStore()\n return afterTaskStore?.rootTaskSpawnPhase === 'action'\n}\n\nexport const wellKnownProperties = new Set([\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toString',\n 'valueOf',\n 'toLocaleString',\n\n // Promise prototype\n // fallthrough\n 'then',\n 'catch',\n 'finally',\n\n // React Promise extension\n // fallthrough\n 'status',\n\n // React introspection\n 'displayName',\n\n // Common tested properties\n // fallthrough\n 'toJSON',\n '$$typeof',\n '__esModule',\n])\n","import * as React from 'react'\n\nconst errorRef: { current: null | Error } = { current: null }\n\n// React.cache is currently only available in canary/experimental React channels.\nconst cache =\n typeof React.cache === 'function'\n ? React.cache\n : (fn: (key: unknown) => void) => fn\n\n// When Dynamic IO is enabled, we record these as errors so that they\n// are captured by the dev overlay as it's more critical to fix these\n// when enabled.\nconst logErrorOrWarn = process.env.__NEXT_DYNAMIC_IO\n ? console.error\n : console.warn\n\n// We don't want to dedupe across requests.\n// The developer might've just attempted to fix the warning so we should warn again if it still happens.\nconst flushCurrentErrorIfNew = cache(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- cache key\n (key: unknown) => {\n try {\n logErrorOrWarn(errorRef.current)\n } finally {\n errorRef.current = null\n }\n }\n)\n\n/**\n * Creates a function that logs an error message that is deduped by the userland\n * callsite.\n * This requires no indirection between the call of this function and the userland\n * callsite i.e. there's only a single library frame above this.\n * Do not use on the Client where sourcemaps and ignore listing might be enabled.\n * Only use that for warnings need a fix independent of the callstack.\n *\n * @param getMessage\n * @returns\n */\nexport function createDedupedByCallsiteServerErrorLoggerDev<Args extends any[]>(\n getMessage: (...args: Args) => Error\n) {\n return function logDedupedError(...args: Args) {\n const message = getMessage(...args)\n\n if (process.env.NODE_ENV !== 'production') {\n const callStackFrames = new Error().stack?.split('\\n')\n if (callStackFrames === undefined || callStackFrames.length < 4) {\n logErrorOrWarn(message)\n } else {\n // Error:\n // logDedupedError\n // asyncApiBeingAccessedSynchronously\n // <userland callsite>\n // TODO: This breaks if sourcemaps with ignore lists are enabled.\n const key = callStackFrames[4]\n errorRef.current = message\n flushCurrentErrorIfNew(key)\n }\n } else {\n logErrorOrWarn(message)\n }\n }\n}\n","import type { WorkStore } from '../app-render/work-async-storage.external'\nimport type { FallbackRouteParams } from './fallback-params'\n\nimport { ReflectAdapter } from '../web/spec-extension/adapters/reflect'\nimport {\n abortAndThrowOnSynchronousRequestDataAccess,\n throwToInterruptStaticGeneration,\n postponeWithTracking,\n trackSynchronousRequestDataAccessInDev,\n} from '../app-render/dynamic-rendering'\n\nimport {\n workUnitAsyncStorage,\n type PrerenderStore,\n type PrerenderStorePPR,\n type PrerenderStoreLegacy,\n type PrerenderStoreModern,\n} from '../app-render/work-unit-async-storage.external'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { describeStringPropertyAccess, wellKnownProperties } from './utils'\nimport { makeHangingPromise } from '../dynamic-rendering-utils'\nimport { createDedupedByCallsiteServerErrorLoggerDev } from '../create-deduped-by-callsite-server-error-logger'\nimport { scheduleImmediate } from '../../lib/scheduler'\n\nexport type ParamValue = string | Array<string> | undefined\nexport type Params = Record<string, ParamValue>\n\n/**\n * In this version of Next.js the `params` prop passed to Layouts, Pages, and other Segments is a Promise.\n * However to facilitate migration to this new Promise type you can currently still access params directly on the Promise instance passed to these Segments.\n * The `UnsafeUnwrappedParams` type is available if you need to temporarily access the underlying params without first awaiting or `use`ing the Promise.\n *\n * In a future version of Next.js the `params` prop will be a plain Promise and this type will be removed.\n *\n * Typically instances of `params` can be updated automatically to be treated as a Promise by a codemod published alongside this Next.js version however if you\n * have not yet run the codemod of the codemod cannot detect certain instances of `params` usage you should first try to refactor your code to await `params`.\n *\n * If refactoring is not possible but you still want to be able to access params directly without typescript errors you can cast the params Promise to this type\n *\n * ```tsx\n * type Props = { params: Promise<{ id: string }>}\n *\n * export default async function Layout(props: Props) {\n * const directParams = (props.params as unknown as UnsafeUnwrappedParams<typeof props.params>)\n * return ...\n * }\n * ```\n *\n * This type is marked deprecated to help identify it as target for refactoring away.\n *\n * @deprecated\n */\nexport type UnsafeUnwrappedParams<P> =\n P extends Promise<infer U> ? Omit<U, 'then' | 'status' | 'value'> : never\n\nexport function createParamsFromClient(\n underlyingParams: Params,\n workStore: WorkStore\n) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-ppr':\n case 'prerender-legacy':\n return createPrerenderParams(underlyingParams, workStore, workUnitStore)\n default:\n // fallthrough\n }\n }\n return createRenderParams(underlyingParams, workStore)\n}\n\n// generateMetadata always runs in RSC context so it is equivalent to a Server Page Component\nexport type CreateServerParamsForMetadata = typeof createServerParamsForMetadata\nexport const createServerParamsForMetadata = createServerParamsForServerSegment\n\n// routes always runs in RSC context so it is equivalent to a Server Page Component\nexport function createServerParamsForRoute(\n underlyingParams: Params,\n workStore: WorkStore\n) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-ppr':\n case 'prerender-legacy':\n return createPrerenderParams(underlyingParams, workStore, workUnitStore)\n default:\n // fallthrough\n }\n }\n return createRenderParams(underlyingParams, workStore)\n}\n\nexport function createServerParamsForServerSegment(\n underlyingParams: Params,\n workStore: WorkStore\n): Promise<Params> {\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-ppr':\n case 'prerender-legacy':\n return createPrerenderParams(underlyingParams, workStore, workUnitStore)\n default:\n // fallthrough\n }\n }\n return createRenderParams(underlyingParams, workStore)\n}\n\nexport function createPrerenderParamsForClientSegment(\n underlyingParams: Params,\n workStore: WorkStore\n): Promise<Params> {\n const prerenderStore = workUnitAsyncStorage.getStore()\n if (prerenderStore && prerenderStore.type === 'prerender') {\n const fallbackParams = workStore.fallbackRouteParams\n if (fallbackParams) {\n for (let key in underlyingParams) {\n if (fallbackParams.has(key)) {\n // This params object has one of more fallback params so we need to consider\n // the awaiting of this params object \"dynamic\". Since we are in dynamicIO mode\n // we encode this as a promise that never resolves\n return makeHangingPromise(prerenderStore.renderSignal, '`params`')\n }\n }\n }\n }\n // We're prerendering in a mode that does not abort. We resolve the promise without\n // any tracking because we're just transporting a value from server to client where the tracking\n // will be applied.\n return Promise.resolve(underlyingParams)\n}\n\nfunction createPrerenderParams(\n underlyingParams: Params,\n workStore: WorkStore,\n prerenderStore: PrerenderStore\n): Promise<Params> {\n const fallbackParams = workStore.fallbackRouteParams\n if (fallbackParams) {\n let hasSomeFallbackParams = false\n for (const key in underlyingParams) {\n if (fallbackParams.has(key)) {\n hasSomeFallbackParams = true\n break\n }\n }\n\n if (hasSomeFallbackParams) {\n // params need to be treated as dynamic because we have at least one fallback param\n if (prerenderStore.type === 'prerender') {\n // We are in a dynamicIO (PPR or otherwise) prerender\n return makeAbortingExoticParams(\n underlyingParams,\n workStore.route,\n prerenderStore\n )\n }\n // remaining cases are prerender-ppr and prerender-legacy\n // We aren't in a dynamicIO prerender but we do have fallback params at this\n // level so we need to make an erroring exotic params object which will postpone\n // if you access the fallback params\n return makeErroringExoticParams(\n underlyingParams,\n fallbackParams,\n workStore,\n prerenderStore\n )\n }\n }\n\n // We don't have any fallback params so we have an entirely static safe params object\n return makeUntrackedExoticParams(underlyingParams)\n}\n\nfunction createRenderParams(\n underlyingParams: Params,\n workStore: WorkStore\n): Promise<Params> {\n if (process.env.NODE_ENV === 'development' && !workStore.isPrefetchRequest) {\n return makeDynamicallyTrackedExoticParamsWithDevWarnings(\n underlyingParams,\n workStore\n )\n } else {\n return makeUntrackedExoticParams(underlyingParams)\n }\n}\n\ninterface CacheLifetime {}\nconst CachedParams = new WeakMap<CacheLifetime, Promise<Params>>()\n\nfunction makeAbortingExoticParams(\n underlyingParams: Params,\n route: string,\n prerenderStore: PrerenderStoreModern\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const promise = makeHangingPromise<Params>(\n prerenderStore.renderSignal,\n '`params`'\n )\n CachedParams.set(underlyingParams, promise)\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n Object.defineProperty(promise, prop, {\n get() {\n const expression = describeStringPropertyAccess('params', prop)\n const error = createParamsAccessError(route, expression)\n abortAndThrowOnSynchronousRequestDataAccess(\n route,\n expression,\n error,\n prerenderStore\n )\n },\n set(newValue) {\n Object.defineProperty(promise, prop, {\n value: newValue,\n writable: true,\n enumerable: true,\n })\n },\n enumerable: true,\n configurable: true,\n })\n }\n })\n\n return promise\n}\n\nfunction makeErroringExoticParams(\n underlyingParams: Params,\n fallbackParams: FallbackRouteParams,\n workStore: WorkStore,\n prerenderStore: PrerenderStorePPR | PrerenderStoreLegacy\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const augmentedUnderlying = { ...underlyingParams }\n\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = Promise.resolve(augmentedUnderlying)\n CachedParams.set(underlyingParams, promise)\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n if (fallbackParams.has(prop)) {\n Object.defineProperty(augmentedUnderlying, prop, {\n get() {\n const expression = describeStringPropertyAccess('params', prop)\n // In most dynamic APIs we also throw if `dynamic = \"error\"` however\n // for params is only dynamic when we're generating a fallback shell\n // and even when `dynamic = \"error\"` we still support generating dynamic\n // fallback shells\n // TODO remove this comment when dynamicIO is the default since there\n // will be no `dynamic = \"error\"`\n if (prerenderStore.type === 'prerender-ppr') {\n // PPR Prerender (no dynamicIO)\n postponeWithTracking(\n workStore.route,\n expression,\n prerenderStore.dynamicTracking\n )\n } else {\n // Legacy Prerender\n throwToInterruptStaticGeneration(\n expression,\n workStore,\n prerenderStore\n )\n }\n },\n enumerable: true,\n })\n Object.defineProperty(promise, prop, {\n get() {\n const expression = describeStringPropertyAccess('params', prop)\n // In most dynamic APIs we also throw if `dynamic = \"error\"` however\n // for params is only dynamic when we're generating a fallback shell\n // and even when `dynamic = \"error\"` we still support generating dynamic\n // fallback shells\n // TODO remove this comment when dynamicIO is the default since there\n // will be no `dynamic = \"error\"`\n if (prerenderStore.type === 'prerender-ppr') {\n // PPR Prerender (no dynamicIO)\n postponeWithTracking(\n workStore.route,\n expression,\n prerenderStore.dynamicTracking\n )\n } else {\n // Legacy Prerender\n throwToInterruptStaticGeneration(\n expression,\n workStore,\n prerenderStore\n )\n }\n },\n set(newValue) {\n Object.defineProperty(promise, prop, {\n value: newValue,\n writable: true,\n enumerable: true,\n })\n },\n enumerable: true,\n configurable: true,\n })\n } else {\n ;(promise as any)[prop] = underlyingParams[prop]\n }\n }\n })\n\n return promise\n}\n\nfunction makeUntrackedExoticParams(underlyingParams: Params): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = Promise.resolve(underlyingParams)\n CachedParams.set(underlyingParams, promise)\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n ;(promise as any)[prop] = underlyingParams[prop]\n }\n })\n\n return promise\n}\n\nfunction makeDynamicallyTrackedExoticParamsWithDevWarnings(\n underlyingParams: Params,\n store: WorkStore\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = new Promise<Params>((resolve) =>\n scheduleImmediate(() => resolve(underlyingParams))\n )\n\n const proxiedProperties = new Set<string>()\n const unproxiedProperties: Array<string> = []\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n unproxiedProperties.push(prop)\n } else {\n proxiedProperties.add(prop)\n ;(promise as any)[prop] = underlyingParams[prop]\n }\n })\n\n const proxiedPromise = new Proxy(promise, {\n get(target, prop, receiver) {\n if (typeof prop === 'string') {\n if (\n // We are accessing a property that was proxied to the promise instance\n proxiedProperties.has(prop)\n ) {\n const expression = describeStringPropertyAccess('params', prop)\n syncIODev(store.route, expression)\n }\n }\n return ReflectAdapter.get(target, prop, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'string') {\n proxiedProperties.delete(prop)\n }\n return ReflectAdapter.set(target, prop, value, receiver)\n },\n ownKeys(target) {\n const expression = '`...params` or similar expression'\n syncIODev(store.route, expression, unproxiedProperties)\n return Reflect.ownKeys(target)\n },\n })\n\n CachedParams.set(underlyingParams, proxiedPromise)\n return proxiedPromise\n}\n\nfunction syncIODev(\n route: string | undefined,\n expression: string,\n missingProperties?: Array<string>\n) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (\n workUnitStore &&\n workUnitStore.type === 'request' &&\n workUnitStore.prerenderPhase === true\n ) {\n // When we're rendering dynamically in dev we need to advance out of the\n // Prerender environment when we read Request data synchronously\n const requestStore = workUnitStore\n trackSynchronousRequestDataAccessInDev(requestStore)\n }\n // In all cases we warn normally\n if (missingProperties && missingProperties.length > 0) {\n warnForIncompleteEnumeration(route, expression, missingProperties)\n } else {\n warnForSyncAccess(route, expression)\n }\n}\n\nconst warnForSyncAccess = createDedupedByCallsiteServerErrorLoggerDev(\n createParamsAccessError\n)\n\nconst warnForIncompleteEnumeration =\n createDedupedByCallsiteServerErrorLoggerDev(createIncompleteEnumerationError)\n\nfunction createParamsAccessError(\n route: string | undefined,\n expression: string\n) {\n const prefix = route ? `Route \"${route}\" ` : 'This route '\n return new Error(\n `${prefix}used ${expression}. ` +\n `\\`params\\` should be awaited before using its properties. ` +\n `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`\n )\n}\n\nfunction createIncompleteEnumerationError(\n route: string | undefined,\n expression: string,\n missingProperties: Array<string>\n) {\n const prefix = route ? `Route \"${route}\" ` : 'This route '\n return new Error(\n `${prefix}used ${expression}. ` +\n `\\`params\\` should be awaited before using its properties. ` +\n `The following properties were not available through enumeration ` +\n `because they conflict with builtin property names: ` +\n `${describeListOfPropertyNames(missingProperties)}. ` +\n `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`\n )\n}\n\nfunction describeListOfPropertyNames(properties: Array<string>) {\n switch (properties.length) {\n case 0:\n throw new InvariantError(\n 'Expected describeListOfPropertyNames to be called with a non-empty list of strings.'\n )\n case 1:\n return `\\`${properties[0]}\\``\n case 2:\n return `\\`${properties[0]}\\` and \\`${properties[1]}\\``\n default: {\n let description = ''\n for (let i = 0; i < properties.length - 1; i++) {\n description += `\\`${properties[i]}\\`, `\n }\n description += `, and \\`${properties[properties.length - 1]}\\``\n return description\n }\n }\n}\n","import type { NextConfig } from '../../config-shared'\nimport type { AppRouteRouteDefinition } from '../../route-definitions/app-route-route-definition'\nimport type { AppSegmentConfig } from '../../../build/segment-config/app/app-segment-config'\nimport type { NextRequest } from '../../web/spec-extension/request'\nimport type { PrerenderManifest } from '../../../build'\nimport type { NextURL } from '../../web/next-url'\nimport type { DeepReadonly } from '../../../shared/lib/deep-readonly'\nimport type { WorkUnitStore } from '../../app-render/work-unit-async-storage.external'\n\nimport {\n RouteModule,\n type RouteModuleHandleContext,\n type RouteModuleOptions,\n} from '../route-module'\nimport { createRequestStoreForAPI } from '../../async-storage/request-store'\nimport {\n createWorkStore,\n type WorkStoreContext,\n} from '../../async-storage/work-store'\nimport { type HTTP_METHOD, HTTP_METHODS, isHTTPMethod } from '../../web/http'\nimport { getImplicitTags } from '../../lib/implicit-tags'\nimport { patchFetch } from '../../lib/patch-fetch'\nimport { getTracer } from '../../lib/trace/tracer'\nimport { AppRouteRouteHandlersSpan } from '../../lib/trace/constants'\nimport { getPathnameFromAbsolutePath } from './helpers/get-pathname-from-absolute-path'\nimport * as Log from '../../../build/output/log'\nimport { autoImplementMethods } from './helpers/auto-implement-methods'\nimport {\n appendMutableCookies,\n type ReadonlyRequestCookies,\n} from '../../web/spec-extension/adapters/request-cookies'\nimport { HeadersAdapter } from '../../web/spec-extension/adapters/headers'\nimport { RequestCookiesAdapter } from '../../web/spec-extension/adapters/request-cookies'\nimport { parsedUrlQueryToParams } from './helpers/parsed-url-query-to-params'\nimport { printDebugThrownValueForProspectiveRender } from '../../app-render/prospective-render-utils'\n\nimport * as serverHooks from '../../../client/components/hooks-server-context'\nimport { DynamicServerError } from '../../../client/components/hooks-server-context'\n\nimport {\n workAsyncStorage,\n type WorkStore,\n} from '../../app-render/work-async-storage.external'\nimport {\n workUnitAsyncStorage,\n type RequestStore,\n type PrerenderStore,\n} from '../../app-render/work-unit-async-storage.external'\nimport {\n actionAsyncStorage,\n type ActionStore,\n} from '../../app-render/action-async-storage.external'\nimport * as sharedModules from './shared-modules'\nimport { getIsServerAction } from '../../lib/server-action-request-meta'\nimport { RequestCookies } from 'next/dist/compiled/@edge-runtime/cookies'\nimport { cleanURL } from './helpers/clean-url'\nimport { StaticGenBailoutError } from '../../../client/components/static-generation-bailout'\nimport { isStaticGenEnabled } from './helpers/is-static-gen-enabled'\nimport {\n abortAndThrowOnSynchronousRequestDataAccess,\n postponeWithTracking,\n createDynamicTrackingState,\n getFirstDynamicReason,\n} from '../../app-render/dynamic-rendering'\nimport { ReflectAdapter } from '../../web/spec-extension/adapters/reflect'\nimport type { RenderOptsPartial } from '../../app-render/types'\nimport { CacheSignal } from '../../app-render/cache-signal'\nimport { scheduleImmediate } from '../../../lib/scheduler'\nimport { createServerParamsForRoute } from '../../request/params'\nimport type { AppSegment } from '../../../build/segment-config/app/app-segments'\nimport {\n getRedirectStatusCodeFromError,\n getURLFromRedirectError,\n} from '../../../client/components/redirect'\nimport {\n isRedirectError,\n type RedirectError,\n} from '../../../client/components/redirect-error'\nimport {\n getAccessFallbackHTTPStatus,\n isHTTPAccessFallbackError,\n} from '../../../client/components/http-access-fallback/http-access-fallback'\nimport { RedirectStatusCode } from '../../../client/components/redirect-status-code'\nimport { INFINITE_CACHE } from '../../../lib/constants'\n\nexport class WrappedNextRouterError {\n constructor(\n public readonly error: RedirectError,\n public readonly headers?: Headers\n ) {}\n}\n\n/**\n * The AppRouteModule is the type of the module exported by the bundled App\n * Route module.\n */\nexport type AppRouteModule = typeof import('../../../build/templates/app-route')\n\nexport type AppRouteSharedContext = {\n buildId: string\n}\n\n/**\n * AppRouteRouteHandlerContext is the context that is passed to the route\n * handler for app routes.\n */\nexport interface AppRouteRouteHandlerContext extends RouteModuleHandleContext {\n renderOpts: WorkStoreContext['renderOpts'] &\n Pick<RenderOptsPartial, 'onInstrumentationRequestError'> &\n CollectedCacheInfo\n prerenderManifest: DeepReadonly<PrerenderManifest>\n sharedContext: AppRouteSharedContext\n}\n\ntype CollectedCacheInfo = {\n collectedTags?: string\n collectedRevalidate?: number\n collectedExpire?: number\n collectedStale?: number\n}\n\n/**\n * AppRouteHandlerFnContext is the context that is passed to the handler as the\n * second argument.\n */\ntype AppRouteHandlerFnContext = {\n params?: Promise<Record<string, string | string[] | undefined>>\n}\n\n/**\n * Handler function for app routes. If a non-Response value is returned, an error\n * will be thrown.\n */\nexport type AppRouteHandlerFn = (\n /**\n * Incoming request object.\n */\n req: NextRequest,\n /**\n * Context properties on the request (including the parameters if this was a\n * dynamic route).\n */\n ctx: AppRouteHandlerFnContext\n) => unknown\n\n/**\n * AppRouteHandlers describes the handlers for app routes that is provided by\n * the userland module.\n */\nexport type AppRouteHandlers = {\n [method in HTTP_METHOD]?: AppRouteHandlerFn\n}\n\n/**\n * AppRouteUserlandModule is the userland module that is provided for app\n * routes. This contains all the user generated code.\n */\nexport type AppRouteUserlandModule = AppRouteHandlers &\n Pick<\n AppSegmentConfig,\n 'dynamic' | 'revalidate' | 'dynamicParams' | 'fetchCache'\n > &\n Pick<AppSegment, 'generateStaticParams'>\n\n/**\n * AppRouteRouteModuleOptions is the options that are passed to the app route\n * module from the bundled code.\n */\nexport interface AppRouteRouteModuleOptions\n extends RouteModuleOptions<AppRouteRouteDefinition, AppRouteUserlandModule> {\n readonly resolvedPagePath: string\n readonly nextConfigOutput: NextConfig['output']\n}\n\n/**\n * AppRouteRouteHandler is the handler for app routes.\n */\nexport class AppRouteRouteModule extends RouteModule<\n AppRouteRouteDefinition,\n AppRouteUserlandModule\n> {\n /**\n * A reference to the request async storage.\n */\n public readonly workUnitAsyncStorage = workUnitAsyncStorage\n\n /**\n * A reference to the static generation async storage.\n */\n public readonly workAsyncStorage = workAsyncStorage\n\n /**\n * An interface to call server hooks which interact with the underlying\n * storage.\n */\n public readonly serverHooks = serverHooks\n\n public static readonly sharedModules = sharedModules\n\n /**\n * A reference to the mutation related async storage, such as mutations of\n * cookies.\n */\n public readonly actionAsyncStorage = actionAsyncStorage\n\n public readonly resolvedPagePath: string\n public readonly nextConfigOutput: NextConfig['output'] | undefined\n\n private readonly methods: Record<HTTP_METHOD, AppRouteHandlerFn>\n private readonly hasNonStaticMethods: boolean\n private readonly dynamic: AppRouteUserlandModule['dynamic']\n\n constructor({\n userland,\n definition,\n resolvedPagePath,\n nextConfigOutput,\n }: AppRouteRouteModuleOptions) {\n super({ userland, definition })\n\n this.resolvedPagePath = resolvedPagePath\n this.nextConfigOutput = nextConfigOutput\n\n // Automatically implement some methods if they aren't implemented by the\n // userland module.\n this.methods = autoImplementMethods(userland)\n\n // Get the non-static methods for this route.\n this.hasNonStaticMethods = hasNonStaticMethods(userland)\n\n // Get the dynamic property from the userland module.\n this.dynamic = this.userland.dynamic\n if (this.nextConfigOutput === 'export') {\n if (this.dynamic === 'force-dynamic') {\n throw new Error(\n `export const dynamic = \"force-dynamic\" on page \"${definition.pathname}\" cannot be used with \"output: export\". See more info here: https://nextjs.org/docs/advanced-features/static-html-export`\n )\n } else if (!isStaticGenEnabled(this.userland) && this.userland['GET']) {\n throw new Error(\n `export const dynamic = \"force-static\"/export const revalidate not configured on route \"${definition.pathname}\" with \"output: export\". See more info here: https://nextjs.org/docs/advanced-features/static-html-export`\n )\n } else {\n this.dynamic = 'error'\n }\n }\n\n // We only warn in development after here, so return if we're not in\n // development.\n if (process.env.NODE_ENV === 'development') {\n // Print error in development if the exported handlers are in lowercase, only\n // uppercase handlers are supported.\n const lowercased = HTTP_METHODS.map((method) => method.toLowerCase())\n for (const method of lowercased) {\n if (method in this.userland) {\n Log.error(\n `Detected lowercase method '${method}' in '${\n this.resolvedPagePath\n }'. Export the uppercase '${method.toUpperCase()}' method name to fix this error.`\n )\n }\n }\n\n // Print error if the module exports a default handler, they must use named\n // exports for each HTTP method.\n if ('default' in this.userland) {\n Log.error(\n `Detected default export in '${this.resolvedPagePath}'. Export a named export for each HTTP method instead.`\n )\n }\n\n // If there is no methods exported by this module, then return a not found\n // response.\n if (!HTTP_METHODS.some((method) => method in this.userland)) {\n Log.error(\n `No HTTP methods exported in '${this.resolvedPagePath}'. Export a named export for each HTTP method.`\n )\n }\n }\n }\n\n /**\n * Resolves the handler function for the given method.\n *\n * @param method the requested method\n * @returns the handler function for the given method\n */\n private resolve(method: string): AppRouteHandlerFn {\n // Ensure that the requested method is a valid method (to prevent RCE's).\n if (!isHTTPMethod(method)) return () => new Response(null, { status: 400 })\n\n // Return the handler.\n return this.methods[method]\n }\n\n private async do(\n handler: AppRouteHandlerFn,\n actionStore: ActionStore,\n workStore: WorkStore,\n // @TODO refactor to not take this argument but instead construct the RequestStore\n // inside this function. Right now we get passed a RequestStore even when\n // we're going to do a prerender. We should probably just split do up into prexecute and execute\n requestStore: RequestStore,\n implicitTags: string[],\n request: NextRequest,\n context: AppRouteRouteHandlerContext\n ) {\n const isStaticGeneration = workStore.isStaticGeneration\n const dynamicIOEnabled = !!context.renderOpts.experimental?.dynamicIO\n\n // Patch the global fetch.\n patchFetch({\n workAsyncStorage: this.workAsyncStorage,\n workUnitAsyncStorage: this.workUnitAsyncStorage,\n })\n\n const handlerContext: AppRouteHandlerFnContext = {\n params: context.params\n ? createServerParamsForRoute(\n parsedUrlQueryToParams(context.params),\n workStore\n )\n : undefined,\n }\n\n let prerenderStore: null | PrerenderStore = null\n\n let res: unknown\n try {\n if (isStaticGeneration) {\n const userlandRevalidate = this.userland.revalidate\n const defaultRevalidate: number =\n // If the static generation store does not have a revalidate value\n // set, then we should set it the revalidate value from the userland\n // module or default to false.\n userlandRevalidate === false || userlandRevalidate === undefined\n ? INFINITE_CACHE\n : userlandRevalidate\n\n if (dynamicIOEnabled) {\n /**\n * When we are attempting to statically prerender the GET handler of a route.ts module\n * and dynamicIO is on we follow a similar pattern to rendering.\n *\n * We first run the handler letting caches fill. If something synchronously dynamic occurs\n * during this prospective render then we can infer it will happen on every render and we\n * just bail out of prerendering.\n *\n * Next we run the handler again and we check if we get a result back in a microtask.\n * Next.js expects the return value to be a Response or a Thenable that resolves to a Response.\n * Unfortunately Response's do not allow for accessing the response body synchronously or in\n * a microtask so we need to allow one more task to unwrap the response body. This is a slightly\n * different semantic than what we have when we render and it means that certain tasks can still\n * execute before a prerender completes such as a carefully timed setImmediate.\n *\n * Functionally though IO should still take longer than the time it takes to unwrap the response body\n * so our heuristic of excluding any IO should be preserved.\n */\n const prospectiveController = new AbortController()\n let prospectiveRenderIsDynamic = false\n const cacheSignal = new CacheSignal()\n let dynamicTracking = createDynamicTrackingState(undefined)\n\n const prospectiveRoutePrerenderStore: PrerenderStore =\n (prerenderStore = {\n type: 'prerender',\n phase: 'action',\n implicitTags: implicitTags,\n renderSignal: prospectiveController.signal,\n controller: prospectiveController,\n cacheSignal,\n // During prospective render we don't use a controller\n // because we need to let all caches fill.\n dynamicTracking,\n revalidate: defaultRevalidate,\n expire: INFINITE_CACHE,\n stale: INFINITE_CACHE,\n tags: [...implicitTags],\n prerenderResumeDataCache: null,\n })\n\n let prospectiveResult\n try {\n prospectiveResult = this.workUnitAsyncStorage.run(\n prospectiveRoutePrerenderStore,\n handler,\n request,\n handlerContext\n )\n } catch (err) {\n if (prospectiveController.signal.aborted) {\n // the route handler called an API which is always dynamic\n // there is no need to try again\n prospectiveRenderIsDynamic = true\n } else if (\n process.env.NEXT_DEBUG_BUILD ||\n process.env.__NEXT_VERBOSE_LOGGING\n ) {\n printDebugThrownValueForProspectiveRender(err, workStore.route)\n }\n }\n if (\n typeof prospectiveResult === 'object' &&\n prospectiveResult !== null &&\n typeof (prospectiveResult as any).then === 'function'\n ) {\n // The handler returned a Thenable. We'll listen for rejections to determine\n // if the route is erroring for dynamic reasons.\n ;(prospectiveResult as any as Promise<unknown>).then(\n () => {},\n (err) => {\n if (prospectiveController.signal.aborted) {\n // the route handler called an API which is always dynamic\n // there is no need to try again\n prospectiveRenderIsDynamic = true\n } else if (process.env.NEXT_DEBUG_BUILD) {\n printDebugThrownValueForProspectiveRender(\n err,\n workStore.route\n )\n }\n }\n )\n }\n await cacheSignal.cacheReady()\n\n if (prospectiveRenderIsDynamic) {\n // the route handler called an API which is always dynamic\n // there is no need to try again\n const dynamicReason = getFirstDynamicReason(dynamicTracking)\n if (dynamicReason) {\n throw new DynamicServerError(\n `Route ${workStore.route} couldn't be rendered statically because it used \\`${dynamicReason}\\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n } else {\n console.error(\n 'Expected Next.js to keep track of reason for opting out of static rendering but one was not found. This is a bug in Next.js'\n )\n throw new DynamicServerError(\n `Route ${workStore.route} couldn't be rendered statically because it used a dynamic API. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n }\n }\n\n // TODO start passing this controller to the route handler. We should expose\n // it so the handler to abort inflight requests and other operations if we abort\n // the prerender.\n const finalController = new AbortController()\n dynamicTracking = createDynamicTrackingState(undefined)\n\n const finalRoutePrerenderStore: PrerenderStore = (prerenderStore = {\n type: 'prerender',\n phase: 'action',\n implicitTags: implicitTags,\n renderSignal: finalController.signal,\n controller: finalController,\n cacheSignal: null,\n dynamicTracking,\n revalidate: defaultRevalidate,\n expire: INFINITE_CACHE,\n stale: INFINITE_CACHE,\n tags: [...implicitTags],\n prerenderResumeDataCache: null,\n })\n\n let responseHandled = false\n res = await new Promise((resolve, reject) => {\n scheduleImmediate(async () => {\n try {\n const result = await (this.workUnitAsyncStorage.run(\n finalRoutePrerenderStore,\n handler,\n request,\n handlerContext\n ) as Promise<Response>)\n if (responseHandled) {\n // we already rejected in the followup task\n return\n } else if (!(result instanceof Response)) {\n // This is going to error but we let that happen below\n resolve(result)\n return\n }\n\n responseHandled = true\n\n let bodyHandled = false\n result.arrayBuffer().then((body) => {\n if (!bodyHandled) {\n bodyHandled = true\n\n resolve(\n new Response(body, {\n headers: result.headers,\n status: result.status,\n statusText: result.statusText,\n })\n )\n }\n }, reject)\n scheduleImmediate(() => {\n if (!bodyHandled) {\n bodyHandled = true\n finalController.abort()\n reject(createDynamicIOError(workStore.route))\n }\n })\n } catch (err) {\n reject(err)\n }\n })\n scheduleImmediate(() => {\n if (!responseHandled) {\n responseHandled = true\n finalController.abort()\n reject(createDynamicIOError(workStore.route))\n }\n })\n })\n if (finalController.signal.aborted) {\n // We aborted from within the execution\n throw createDynamicIOError(workStore.route)\n } else {\n // We didn't abort during the execution. We can abort now as a matter of semantics\n // though at the moment nothing actually consumes this signal so it won't halt any\n // inflight work.\n finalController.abort()\n }\n } else {\n prerenderStore = {\n type: 'prerender-legacy',\n phase: 'action',\n implicitTags: implicitTags,\n revalidate: defaultRevalidate,\n expire: INFINITE_CACHE,\n stale: INFINITE_CACHE,\n tags: [...implicitTags],\n }\n\n res = await workUnitAsyncStorage.run(\n prerenderStore,\n handler,\n request,\n handlerContext\n )\n }\n } else {\n res = await workUnitAsyncStorage.run(\n requestStore,\n handler,\n request,\n handlerContext\n )\n }\n } catch (err) {\n if (isRedirectError(err)) {\n const url = getURLFromRedirectError(err)\n if (!url) {\n throw new Error('Invariant: Unexpected redirect url format')\n }\n\n // We need to capture any headers that should be sent on\n // the response.\n const headers = new Headers({ Location: url })\n\n // Let's append any cookies that were added by the\n // cookie API.\n // TODO leaving the gate here b/c it indicates that we might not actually want to do this\n // on every `do` call. During prerender there should be no mutableCookies because\n if (requestStore.type === 'request') {\n appendMutableCookies(headers, requestStore.mutableCookies)\n }\n\n // Return the redirect response.\n return new Response(null, {\n // If we're in an action, we want to use a 303 redirect as we don't\n // want the POST request to follow the redirect, as it could result in\n // erroneous re-submissions.\n status: actionStore.isAction\n ? RedirectStatusCode.SeeOther\n : getRedirectStatusCodeFromError(err),\n headers,\n })\n } else if (isHTTPAccessFallbackError(err)) {\n const httpStatus = getAccessFallbackHTTPStatus(err)\n return new Response(null, { status: httpStatus })\n }\n\n throw err\n }\n\n // Validate that the response is a valid response object.\n if (!(res instanceof Response)) {\n throw new Error(\n `No response is returned from route handler '${this.resolvedPagePath}'. Ensure you return a \\`Response\\` or a \\`NextResponse\\` in all branches of your handler.`\n )\n }\n\n context.renderOpts.fetchMetrics = workStore.fetchMetrics\n\n context.renderOpts.pendingWaitUntil = Promise.all([\n workStore.incrementalCache?.revalidateTag(\n workStore.revalidatedTags || []\n ),\n ...Object.values(workStore.pendingRevalidates || {}),\n ]).finally(() => {\n if (process.env.NEXT_PRIVATE_DEBUG_CACHE) {\n console.log(\n 'pending revalidates promise finished for:',\n requestStore.url\n )\n }\n })\n\n if (prerenderStore) {\n context.renderOpts.collectedTags = prerenderStore.tags?.join(',')\n context.renderOpts.collectedRevalidate = prerenderStore.revalidate\n context.renderOpts.collectedExpire = prerenderStore.expire\n context.renderOpts.collectedStale = prerenderStore.stale\n }\n\n // It's possible cookies were set in the handler, so we need\n // to merge the modified cookies and the returned response\n // here.\n const headers = new Headers(res.headers)\n if (\n requestStore.type === 'request' &&\n appendMutableCookies(headers, requestStore.mutableCookies)\n ) {\n return new Response(res.body, {\n status: res.status,\n statusText: res.statusText,\n headers,\n })\n }\n\n return res\n }\n\n public async handle(\n req: NextRequest,\n context: AppRouteRouteHandlerContext\n ): Promise<Response> {\n // Get the handler function for the given method.\n const handler = this.resolve(req.method)\n\n // Get the context for the static generation.\n const staticGenerationContext: WorkStoreContext = {\n // App Routes don't support unknown route params.\n fallbackRouteParams: null,\n page: this.definition.page,\n renderOpts: context.renderOpts,\n buildId: context.sharedContext.buildId,\n }\n\n // Add the fetchCache option to the renderOpts.\n staticGenerationContext.renderOpts.fetchCache = this.userland.fetchCache\n\n const actionStore: ActionStore = {\n isAppRoute: true,\n isAction: getIsServerAction(req),\n }\n\n const implicitTags = getImplicitTags(\n this.definition.page,\n req.nextUrl,\n // App Routes don't support unknown route params.\n null\n )\n\n const requestStore = createRequestStoreForAPI(\n req,\n req.nextUrl,\n implicitTags,\n undefined,\n context.prerenderManifest.preview\n )\n\n const workStore = createWorkStore(staticGenerationContext)\n\n // Run the handler with the request AsyncLocalStorage to inject the helper\n // support. We set this to `unknown` because the type is not known until\n // runtime when we do a instanceof check below.\n const response: unknown = await this.actionAsyncStorage.run(\n actionStore,\n () =>\n this.workUnitAsyncStorage.run(requestStore, () =>\n this.workAsyncStorage.run(workStore, async () => {\n // Check to see if we should bail out of static generation based on\n // having non-static methods.\n if (this.hasNonStaticMethods) {\n if (workStore.isStaticGeneration) {\n const err = new DynamicServerError(\n 'Route is configured with methods that cannot be statically generated.'\n )\n workStore.dynamicUsageDescription = err.message\n workStore.dynamicUsageStack = err.stack\n throw err\n }\n }\n\n // We assume we can pass the original request through however we may end up\n // proxying it in certain circumstances based on execution type and configuration\n let request = req\n\n // Update the static generation store based on the dynamic property.\n switch (this.dynamic) {\n case 'force-dynamic': {\n // Routes of generated paths should be dynamic\n workStore.forceDynamic = true\n break\n }\n case 'force-static':\n // The dynamic property is set to force-static, so we should\n // force the page to be static.\n workStore.forceStatic = true\n // We also Proxy the request to replace dynamic data on the request\n // with empty stubs to allow for safely executing as static\n request = new Proxy(req, forceStaticRequestHandlers)\n break\n case 'error':\n // The dynamic property is set to error, so we should throw an\n // error if the page is being statically generated.\n workStore.dynamicShouldError = true\n if (workStore.isStaticGeneration)\n request = new Proxy(req, requireStaticRequestHandlers)\n break\n default:\n // We proxy `NextRequest` to track dynamic access, and potentially bail out of static generation\n request = proxyNextRequest(req, workStore)\n }\n\n // TODO: propagate this pathname from route matcher\n const route = getPathnameFromAbsolutePath(this.resolvedPagePath)\n\n const tracer = getTracer()\n\n // Update the root span attribute for the route.\n tracer.setRootSpanAttribute('next.route', route)\n\n return tracer.trace(\n AppRouteRouteHandlersSpan.runHandler,\n {\n spanName: `executing api route (app) ${route}`,\n attributes: {\n 'next.route': route,\n },\n },\n async () =>\n this.do(\n handler,\n actionStore,\n workStore,\n requestStore,\n implicitTags,\n request,\n context\n )\n )\n })\n )\n )\n\n // If the handler did't return a valid response, then return the internal\n // error response.\n if (!(response instanceof Response)) {\n // TODO: validate the correct handling behavior, maybe log something?\n return new Response(null, { status: 500 })\n }\n\n if (response.headers.has('x-middleware-rewrite')) {\n throw new Error(\n 'NextResponse.rewrite() was used in a app route handler, this is not currently supported. Please remove the invocation to continue.'\n )\n }\n\n if (response.headers.get('x-middleware-next') === '1') {\n // TODO: move this error into the `NextResponse.next()` function.\n throw new Error(\n 'NextResponse.next() was used in a app route handler, this is not supported. See here for more info: https://nextjs.org/docs/messages/next-response-next-in-app-route-handler'\n )\n }\n\n return response\n }\n}\n\nexport default AppRouteRouteModule\n\n/**\n * Gets all the method names for handlers that are not considered static.\n *\n * @param handlers the handlers from the userland module\n * @returns the method names that are not considered static or false if all\n * methods are static\n */\nexport function hasNonStaticMethods(handlers: AppRouteHandlers): boolean {\n if (\n // Order these by how common they are to be used\n handlers.POST ||\n handlers.PUT ||\n handlers.DELETE ||\n handlers.PATCH ||\n handlers.OPTIONS\n ) {\n return true\n }\n return false\n}\n\n// These symbols will be used to stash cached values on Proxied requests without requiring\n// additional closures or storage such as WeakMaps.\nconst nextURLSymbol = Symbol('nextUrl')\nconst requestCloneSymbol = Symbol('clone')\nconst urlCloneSymbol = Symbol('clone')\nconst searchParamsSymbol = Symbol('searchParams')\nconst hrefSymbol = Symbol('href')\nconst toStringSymbol = Symbol('toString')\nconst headersSymbol = Symbol('headers')\nconst cookiesSymbol = Symbol('cookies')\n\ntype RequestSymbolTarget = {\n [headersSymbol]?: Headers\n [cookiesSymbol]?: RequestCookies | ReadonlyRequestCookies\n [nextURLSymbol]?: NextURL\n [requestCloneSymbol]?: () => NextRequest\n}\n\ntype UrlSymbolTarget = {\n [searchParamsSymbol]?: URLSearchParams\n [hrefSymbol]?: string\n [toStringSymbol]?: () => string\n [urlCloneSymbol]?: () => NextURL\n}\n\n/**\n * The general technique with these proxy handlers is to prioritize keeping them static\n * by stashing computed values on the Proxy itself. This is safe because the Proxy is\n * inaccessible to the consumer since all operations are forwarded\n */\nconst forceStaticRequestHandlers = {\n get(\n target: NextRequest & RequestSymbolTarget,\n prop: string | symbol,\n receiver: any\n ): unknown {\n switch (prop) {\n case 'headers':\n return (\n target[headersSymbol] ||\n (target[headersSymbol] = HeadersAdapter.seal(new Headers({})))\n )\n case 'cookies':\n return (\n target[cookiesSymbol] ||\n (target[cookiesSymbol] = RequestCookiesAdapter.seal(\n new RequestCookies(new Headers({}))\n ))\n )\n case 'nextUrl':\n return (\n target[nextURLSymbol] ||\n (target[nextURLSymbol] = new Proxy(\n target.nextUrl,\n forceStaticNextUrlHandlers\n ))\n )\n case 'url':\n // we don't need to separately cache this we can just read the nextUrl\n // and return the href since we know it will have been stripped of any\n // dynamic parts. We access via the receiver to trigger the get trap\n return receiver.nextUrl.href\n case 'geo':\n case 'ip':\n return undefined\n case 'clone':\n return (\n target[requestCloneSymbol] ||\n (target[requestCloneSymbol] = () =>\n new Proxy(\n // This is vaguely unsafe but it's required since NextRequest does not implement\n // clone. The reason we might expect this to work in this context is the Proxy will\n // respond with static-amenable values anyway somewhat restoring the interface.\n // @TODO we need to rethink NextRequest and NextURL because they are not sufficientlly\n // sophisticated to adequately represent themselves in all contexts. A better approach is\n // to probably embed the static generation logic into the class itself removing the need\n // for any kind of proxying\n target.clone() as NextRequest,\n forceStaticRequestHandlers\n ))\n )\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n // We don't need to proxy set because all the properties we proxy are ready only\n // and will be ignored\n}\n\nconst forceStaticNextUrlHandlers = {\n get(\n target: NextURL & UrlSymbolTarget,\n prop: string | symbol,\n receiver: any\n ): unknown {\n switch (prop) {\n // URL properties\n case 'search':\n return ''\n case 'searchParams':\n return (\n target[searchParamsSymbol] ||\n (target[searchParamsSymbol] = new URLSearchParams())\n )\n case 'href':\n return (\n target[hrefSymbol] ||\n (target[hrefSymbol] = cleanURL(target.href).href)\n )\n case 'toJSON':\n case 'toString':\n return (\n target[toStringSymbol] ||\n (target[toStringSymbol] = () => receiver.href)\n )\n\n // NextUrl properties\n case 'url':\n // Currently nextURL does not expose url but our Docs indicate that it is an available property\n // I am forcing this to undefined here to avoid accidentally exposing a dynamic value later if\n // the underlying nextURL ends up adding this property\n return undefined\n case 'clone':\n return (\n target[urlCloneSymbol] ||\n (target[urlCloneSymbol] = () =>\n new Proxy(target.clone(), forceStaticNextUrlHandlers))\n )\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n}\n\nfunction proxyNextRequest(request: NextRequest, workStore: WorkStore) {\n const nextUrlHandlers = {\n get(\n target: NextURL & UrlSymbolTarget,\n prop: string | symbol,\n receiver: any\n ): unknown {\n switch (prop) {\n case 'search':\n case 'searchParams':\n case 'url':\n case 'href':\n case 'toJSON':\n case 'toString':\n case 'origin': {\n const workUnitStore = workUnitAsyncStorage.getStore()\n trackDynamic(workStore, workUnitStore, `nextUrl.${prop}`)\n return ReflectAdapter.get(target, prop, receiver)\n }\n case 'clone':\n return (\n target[urlCloneSymbol] ||\n (target[urlCloneSymbol] = () =>\n new Proxy(target.clone(), nextUrlHandlers))\n )\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n }\n\n const nextRequestHandlers = {\n get(\n target: NextRequest & RequestSymbolTarget,\n prop: string | symbol\n ): unknown {\n switch (prop) {\n case 'nextUrl':\n return (\n target[nextURLSymbol] ||\n (target[nextURLSymbol] = new Proxy(target.nextUrl, nextUrlHandlers))\n )\n case 'headers':\n case 'cookies':\n case 'url':\n case 'body':\n case 'blob':\n case 'json':\n case 'text':\n case 'arrayBuffer':\n case 'formData': {\n const workUnitStore = workUnitAsyncStorage.getStore()\n trackDynamic(workStore, workUnitStore, `request.${prop}`)\n // The receiver arg is intentionally the same as the target to fix an issue with\n // edge runtime, where attempting to access internal slots with the wrong `this` context\n // results in an error.\n return ReflectAdapter.get(target, prop, target)\n }\n case 'clone':\n return (\n target[requestCloneSymbol] ||\n (target[requestCloneSymbol] = () =>\n new Proxy(\n // This is vaguely unsafe but it's required since NextRequest does not implement\n // clone. The reason we might expect this to work in this context is the Proxy will\n // respond with static-amenable values anyway somewhat restoring the interface.\n // @TODO we need to rethink NextRequest and NextURL because they are not sufficientlly\n // sophisticated to adequately represent themselves in all contexts. A better approach is\n // to probably embed the static generation logic into the class itself removing the need\n // for any kind of proxying\n target.clone() as NextRequest,\n nextRequestHandlers\n ))\n )\n default:\n // The receiver arg is intentionally the same as the target to fix an issue with\n // edge runtime, where attempting to access internal slots with the wrong `this` context\n // results in an error.\n return ReflectAdapter.get(target, prop, target)\n }\n },\n // We don't need to proxy set because all the properties we proxy are ready only\n // and will be ignored\n }\n\n return new Proxy(request, nextRequestHandlers)\n}\n\nconst requireStaticRequestHandlers = {\n get(\n target: NextRequest & RequestSymbolTarget,\n prop: string | symbol,\n receiver: any\n ): unknown {\n switch (prop) {\n case 'nextUrl':\n return (\n target[nextURLSymbol] ||\n (target[nextURLSymbol] = new Proxy(\n target.nextUrl,\n requireStaticNextUrlHandlers\n ))\n )\n case 'headers':\n case 'cookies':\n case 'url':\n case 'body':\n case 'blob':\n case 'json':\n case 'text':\n case 'arrayBuffer':\n case 'formData':\n throw new StaticGenBailoutError(\n `Route ${target.nextUrl.pathname} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`request.${prop}\\`.`\n )\n case 'clone':\n return (\n target[requestCloneSymbol] ||\n (target[requestCloneSymbol] = () =>\n new Proxy(\n // This is vaguely unsafe but it's required since NextRequest does not implement\n // clone. The reason we might expect this to work in this context is the Proxy will\n // respond with static-amenable values anyway somewhat restoring the interface.\n // @TODO we need to rethink NextRequest and NextURL because they are not sufficientlly\n // sophisticated to adequately represent themselves in all contexts. A better approach is\n // to probably embed the static generation logic into the class itself removing the need\n // for any kind of proxying\n target.clone() as NextRequest,\n requireStaticRequestHandlers\n ))\n )\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n // We don't need to proxy set because all the properties we proxy are ready only\n // and will be ignored\n}\n\nconst requireStaticNextUrlHandlers = {\n get(\n target: NextURL & UrlSymbolTarget,\n prop: string | symbol,\n receiver: any\n ): unknown {\n switch (prop) {\n case 'search':\n case 'searchParams':\n case 'url':\n case 'href':\n case 'toJSON':\n case 'toString':\n case 'origin':\n throw new StaticGenBailoutError(\n `Route ${target.pathname} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`nextUrl.${prop}\\`.`\n )\n case 'clone':\n return (\n target[urlCloneSymbol] ||\n (target[urlCloneSymbol] = () =>\n new Proxy(target.clone(), requireStaticNextUrlHandlers))\n )\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n}\n\nfunction createDynamicIOError(route: string) {\n return new DynamicServerError(\n `Route ${route} couldn't be rendered statically because it used IO that was not cached. See more info here: https://nextjs.org/docs/messages/dynamic-io`\n )\n}\n\nexport function trackDynamic(\n store: WorkStore,\n workUnitStore: undefined | WorkUnitStore,\n expression: string\n): void {\n if (workUnitStore) {\n if (workUnitStore.type === 'cache') {\n throw new Error(\n `Route ${store.route} used \"${expression}\" inside \"use cache\". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \"${expression}\" outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`\n )\n } else if (workUnitStore.type === 'unstable-cache') {\n throw new Error(\n `Route ${store.route} used \"${expression}\" inside a function cached with \"unstable_cache(...)\". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \"${expression}\" outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`\n )\n }\n }\n\n if (store.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${store.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n if (workUnitStore.type === 'prerender') {\n // dynamicIO Prerender\n const error = new Error(\n `Route ${store.route} used ${expression} without first calling \\`await connection()\\`. See more info here: https://nextjs.org/docs/messages/next-prerender-sync-request`\n )\n abortAndThrowOnSynchronousRequestDataAccess(\n store.route,\n expression,\n error,\n workUnitStore\n )\n } else if (workUnitStore.type === 'prerender-ppr') {\n // PPR Prerender\n postponeWithTracking(\n store.route,\n expression,\n workUnitStore.dynamicTracking\n )\n } else if (workUnitStore.type === 'prerender-legacy') {\n // legacy Prerender\n workUnitStore.revalidate = 0\n\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n } else if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore &&\n workUnitStore.type === 'request'\n ) {\n workUnitStore.usedDynamic = true\n }\n }\n}\n","import type { AppRouteModule } from '../module.compiled'\n\n// route handlers are only statically optimized if they define\n// one of these top-level configs manually\n// - dynamic = 'force-static'\n// - dynamic = 'error'\n// - revalidate > 0\n// - revalidate = false\n// - generateStaticParams\nexport function isStaticGenEnabled(\n mod: AppRouteModule['routeModule']['userland']\n) {\n return (\n mod.dynamic === 'force-static' ||\n mod.dynamic === 'error' ||\n mod.revalidate === false ||\n (mod.revalidate !== undefined && mod.revalidate > 0) ||\n typeof mod.generateStaticParams == 'function'\n )\n}\n","/**\n * Based on https://github.com/facebook/react/blob/d4e78c42a94be027b4dc7ed2659a5fddfbf9bd4e/packages/react/src/ReactFetch.js\n */\nimport * as React from 'react'\nimport { cloneResponse } from './clone-response'\nimport { InvariantError } from '../../shared/lib/invariant-error'\n\nconst simpleCacheKey = '[\"GET\",[],null,\"follow\",null,null,null,null]' // generateCacheKey(new Request('https://blank'));\n\nfunction generateCacheKey(request: Request): string {\n // We pick the fields that goes into the key used to dedupe requests.\n // We don't include the `cache` field, because we end up using whatever\n // caching resulted from the first request.\n // Notably we currently don't consider non-standard (or future) options.\n // This might not be safe. TODO: warn for non-standard extensions differing.\n // IF YOU CHANGE THIS UPDATE THE simpleCacheKey ABOVE.\n return JSON.stringify([\n request.method,\n Array.from(request.headers.entries()),\n request.mode,\n request.redirect,\n request.credentials,\n request.referrer,\n request.referrerPolicy,\n request.integrity,\n ])\n}\n\ntype CacheEntry = [\n key: string,\n promise: Promise<Response>,\n response: Response | null,\n]\n\nexport function createDedupeFetch(originalFetch: typeof fetch) {\n const getCacheEntries = React.cache(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- url is the cache key\n (url: string): CacheEntry[] => []\n )\n\n return function dedupeFetch(\n resource: URL | RequestInfo,\n options?: RequestInit\n ): Promise<Response> {\n if (options && options.signal) {\n // If we're passed a signal, then we assume that\n // someone else controls the lifetime of this object and opts out of\n // caching. It's effectively the opt-out mechanism.\n // Ideally we should be able to check this on the Request but\n // it always gets initialized with its own signal so we don't\n // know if it's supposed to override - unless we also override the\n // Request constructor.\n return originalFetch(resource, options)\n }\n // Normalize the Request\n let url: string\n let cacheKey: string\n if (typeof resource === 'string' && !options) {\n // Fast path.\n cacheKey = simpleCacheKey\n url = resource\n } else {\n // Normalize the request.\n // if resource is not a string or a URL (its an instance of Request)\n // then do not instantiate a new Request but instead\n // reuse the request as to not disturb the body in the event it's a ReadableStream.\n const request =\n typeof resource === 'string' || resource instanceof URL\n ? new Request(resource, options)\n : resource\n if (\n (request.method !== 'GET' && request.method !== 'HEAD') ||\n request.keepalive\n ) {\n // We currently don't dedupe requests that might have side-effects. Those\n // have to be explicitly cached. We assume that the request doesn't have a\n // body if it's GET or HEAD.\n // keepalive gets treated the same as if you passed a custom cache signal.\n return originalFetch(resource, options)\n }\n cacheKey = generateCacheKey(request)\n url = request.url\n }\n\n const cacheEntries = getCacheEntries(url)\n for (let i = 0, j = cacheEntries.length; i < j; i += 1) {\n const [key, promise] = cacheEntries[i]\n if (key === cacheKey) {\n return promise.then(() => {\n const response = cacheEntries[i][2]\n if (!response) throw new InvariantError('No cached response')\n\n // We're cloning the response using this utility because there exists\n // a bug in the undici library around response cloning. See the\n // following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n const [cloned1, cloned2] = cloneResponse(response)\n cacheEntries[i][2] = cloned2\n return cloned1\n })\n }\n }\n\n // We pass the original arguments here in case normalizing the Request\n // doesn't include all the options in this environment.\n const promise = originalFetch(resource, options)\n const entry: CacheEntry = [cacheKey, promise, null]\n cacheEntries.push(entry)\n\n return promise.then((response) => {\n // We're cloning the response using this utility because there exists\n // a bug in the undici library around response cloning. See the\n // following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n const [cloned1, cloned2] = cloneResponse(response)\n entry[2] = cloned2\n return cloned1\n })\n }\n}\n","import type { ParsedUrlQuery } from 'querystring'\n\n/**\n * Converts the query into params.\n *\n * @param query the query to convert to params\n * @returns the params\n */\nexport function parsedUrlQueryToParams(\n query: ParsedUrlQuery\n): Record<string, string | string[]> {\n const params: Record<string, string | string[]> = {}\n\n for (const [key, value] of Object.entries(query)) {\n if (typeof value === 'undefined') continue\n params[key] = value\n }\n\n return params\n}\n","import { actionAsyncStorage } from '../../server/app-render/action-async-storage.external'\nimport { RedirectStatusCode } from './redirect-status-code'\nimport {\n RedirectType,\n type RedirectError,\n isRedirectError,\n REDIRECT_ERROR_CODE,\n} from './redirect-error'\n\nexport function getRedirectError(\n url: string,\n type: RedirectType,\n statusCode: RedirectStatusCode = RedirectStatusCode.TemporaryRedirect\n): RedirectError {\n const error = new Error(REDIRECT_ERROR_CODE) as RedirectError\n error.digest = `${REDIRECT_ERROR_CODE};${type};${url};${statusCode};`\n return error\n}\n\n/**\n * This function allows you to redirect the user to another URL. It can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * - In a Server Component, this will insert a meta tag to redirect the user to the target page.\n * - In a Route Handler or Server Action, it will serve a 307/303 to the caller.\n * - In a Server Action, type defaults to 'push' and 'replace' elsewhere.\n *\n * Read more: [Next.js Docs: `redirect`](https://nextjs.org/docs/app/api-reference/functions/redirect)\n */\nexport function redirect(\n /** The URL to redirect to */\n url: string,\n type?: RedirectType\n): never {\n const actionStore = actionAsyncStorage.getStore()\n const redirectType =\n type || (actionStore?.isAction ? RedirectType.push : RedirectType.replace)\n throw getRedirectError(\n url,\n redirectType,\n RedirectStatusCode.TemporaryRedirect\n )\n}\n\n/**\n * This function allows you to redirect the user to another URL. It can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * - In a Server Component, this will insert a meta tag to redirect the user to the target page.\n * - In a Route Handler or Server Action, it will serve a 308/303 to the caller.\n *\n * Read more: [Next.js Docs: `redirect`](https://nextjs.org/docs/app/api-reference/functions/redirect)\n */\nexport function permanentRedirect(\n /** The URL to redirect to */\n url: string,\n type: RedirectType = RedirectType.replace\n): never {\n throw getRedirectError(url, type, RedirectStatusCode.PermanentRedirect)\n}\n\n/**\n * Returns the encoded URL from the error if it's a RedirectError, null\n * otherwise. Note that this does not validate the URL returned.\n *\n * @param error the error that may be a redirect error\n * @return the url if the error was a redirect error\n */\nexport function getURLFromRedirectError(error: RedirectError): string\nexport function getURLFromRedirectError(error: unknown): string | null {\n if (!isRedirectError(error)) return null\n\n // Slices off the beginning of the digest that contains the code and the\n // separating ';'.\n return error.digest.split(';').slice(2, -2).join(';')\n}\n\nexport function getRedirectTypeFromError(error: RedirectError): RedirectType {\n if (!isRedirectError(error)) {\n throw new Error('Not a redirect error')\n }\n\n return error.digest.split(';', 2)[1] as RedirectType\n}\n\nexport function getRedirectStatusCodeFromError(error: RedirectError): number {\n if (!isRedirectError(error)) {\n throw new Error('Not a redirect error')\n }\n\n return Number(error.digest.split(';').at(-2))\n}\n","import type { IncomingMessage } from 'http'\nimport type { BaseNextRequest } from '../base-http'\nimport type { NextRequest } from '../web/exports'\nimport { ACTION_HEADER } from '../../client/components/app-router-headers'\n\nexport function getServerActionRequestMetadata(\n req: IncomingMessage | BaseNextRequest | NextRequest\n): {\n actionId: string | null\n isURLEncodedAction: boolean\n isMultipartAction: boolean\n isFetchAction: boolean\n isServerAction: boolean\n} {\n let actionId: string | null\n let contentType: string | null\n\n if (req.headers instanceof Headers) {\n actionId = req.headers.get(ACTION_HEADER.toLowerCase()) ?? null\n contentType = req.headers.get('content-type')\n } else {\n actionId = (req.headers[ACTION_HEADER.toLowerCase()] as string) ?? null\n contentType = req.headers['content-type'] ?? null\n }\n\n const isURLEncodedAction = Boolean(\n req.method === 'POST' && contentType === 'application/x-www-form-urlencoded'\n )\n const isMultipartAction = Boolean(\n req.method === 'POST' && contentType?.startsWith('multipart/form-data')\n )\n const isFetchAction = Boolean(\n actionId !== undefined &&\n typeof actionId === 'string' &&\n req.method === 'POST'\n )\n\n const isServerAction = Boolean(\n isFetchAction || isURLEncodedAction || isMultipartAction\n )\n\n return {\n actionId,\n isURLEncodedAction,\n isMultipartAction,\n isFetchAction,\n isServerAction,\n }\n}\n\nexport function getIsServerAction(\n req: IncomingMessage | BaseNextRequest | NextRequest\n): boolean {\n return getServerActionRequestMetadata(req).isServerAction\n}\n","import type { WorkStore } from '../app-render/work-async-storage.external'\nimport type { IncrementalCache } from '../lib/incremental-cache'\nimport type { RenderOpts } from '../app-render/types'\nimport type { FetchMetric } from '../base-http'\nimport type { RequestLifecycleOpts } from '../base-server'\nimport type { FallbackRouteParams } from '../request/fallback-params'\nimport type { AppSegmentConfig } from '../../build/segment-config/app/app-segment-config'\nimport type { CacheLife } from '../use-cache/cache-life'\n\nimport { AfterContext } from '../after/after-context'\n\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\n\nexport type WorkStoreContext = {\n /**\n * The page that is being rendered. This relates to the path to the page file.\n */\n page: string\n\n /**\n * The route parameters that are currently unknown.\n */\n fallbackRouteParams: FallbackRouteParams | null\n\n requestEndedState?: { ended?: boolean }\n isPrefetchRequest?: boolean\n renderOpts: {\n cacheLifeProfiles?: { [profile: string]: CacheLife }\n incrementalCache?: IncrementalCache\n isOnDemandRevalidate?: boolean\n fetchCache?: AppSegmentConfig['fetchCache']\n isServerAction?: boolean\n pendingWaitUntil?: Promise<any>\n experimental: Pick<\n RenderOpts['experimental'],\n 'isRoutePPREnabled' | 'dynamicIO' | 'authInterrupts'\n >\n\n /**\n * Fetch metrics attached in patch-fetch.ts\n **/\n fetchMetrics?: FetchMetric[]\n\n /**\n * A hack around accessing the store value outside the context of the\n * request.\n *\n * @internal\n * @deprecated should only be used as a temporary workaround\n */\n // TODO: remove this when we resolve accessing the store outside the execution context\n store?: WorkStore\n } & Pick<\n // Pull some properties from RenderOpts so that the docs are also\n // mirrored.\n RenderOpts,\n | 'assetPrefix'\n | 'supportsDynamicResponse'\n | 'isRevalidate'\n | 'nextExport'\n | 'isDraftMode'\n | 'isDebugDynamicAccesses'\n > &\n RequestLifecycleOpts &\n Partial<Pick<RenderOpts, 'reactLoadableManifest'>>\n\n /**\n * The build ID of the current build.\n */\n buildId: string\n}\n\nexport function createWorkStore({\n page,\n fallbackRouteParams,\n renderOpts,\n requestEndedState,\n isPrefetchRequest,\n buildId,\n}: WorkStoreContext): WorkStore {\n /**\n * Rules of Static & Dynamic HTML:\n *\n * 1.) We must generate static HTML unless the caller explicitly opts\n * in to dynamic HTML support.\n *\n * 2.) If dynamic HTML support is requested, we must honor that request\n * or throw an error. It is the sole responsibility of the caller to\n * ensure they aren't e.g. requesting dynamic HTML for an AMP page.\n *\n * 3.) If the request is in draft mode, we must generate dynamic HTML.\n *\n * 4.) If the request is a server action, we must generate dynamic HTML.\n *\n * These rules help ensure that other existing features like request caching,\n * coalescing, and ISR continue working as intended.\n */\n const isStaticGeneration =\n !renderOpts.supportsDynamicResponse &&\n !renderOpts.isDraftMode &&\n !renderOpts.isServerAction\n\n const store: WorkStore = {\n isStaticGeneration,\n page,\n fallbackRouteParams,\n route: normalizeAppPath(page),\n incrementalCache:\n // we fallback to a global incremental cache for edge-runtime locally\n // so that it can access the fs cache without mocks\n renderOpts.incrementalCache || (globalThis as any).__incrementalCache,\n cacheLifeProfiles: renderOpts.cacheLifeProfiles,\n isRevalidate: renderOpts.isRevalidate,\n isPrerendering: renderOpts.nextExport,\n fetchCache: renderOpts.fetchCache,\n isOnDemandRevalidate: renderOpts.isOnDemandRevalidate,\n\n isDraftMode: renderOpts.isDraftMode,\n\n rootParams: {},\n\n requestEndedState,\n isPrefetchRequest,\n buildId,\n reactLoadableManifest: renderOpts?.reactLoadableManifest || {},\n assetPrefix: renderOpts?.assetPrefix || '',\n\n afterContext: createAfterContext(renderOpts),\n }\n\n // TODO: remove this when we resolve accessing the store outside the execution context\n renderOpts.store = store\n\n return store\n}\n\nfunction createAfterContext(renderOpts: RequestLifecycleOpts): AfterContext {\n const { waitUntil, onClose, onAfterTaskError } = renderOpts\n return new AfterContext({\n waitUntil,\n onClose,\n onTaskError: onAfterTaskError,\n })\n}\n","/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */\nexport function ensureLeadingSlash(path: string) {\n return path.startsWith('/') ? path : `/${path}`\n}\n","import { ensureLeadingSlash } from '../../page-path/ensure-leading-slash'\nimport { isGroupSegment } from '../../segment'\n\n/**\n * Normalizes an app route so it represents the actual request path. Essentially\n * performing the following transformations:\n *\n * - `/(dashboard)/user/[id]/page` to `/user/[id]`\n * - `/(dashboard)/account/page` to `/account`\n * - `/user/[id]/page` to `/user/[id]`\n * - `/account/page` to `/account`\n * - `/page` to `/`\n * - `/(dashboard)/user/[id]/route` to `/user/[id]`\n * - `/(dashboard)/account/route` to `/account`\n * - `/user/[id]/route` to `/user/[id]`\n * - `/account/route` to `/account`\n * - `/route` to `/`\n * - `/` to `/`\n *\n * @param route the app route to normalize\n * @returns the normalized pathname\n */\nexport function normalizeAppPath(route: string) {\n return ensureLeadingSlash(\n route.split('/').reduce((pathname, segment, index, segments) => {\n // Empty segments are ignored.\n if (!segment) {\n return pathname\n }\n\n // Groups are ignored.\n if (isGroupSegment(segment)) {\n return pathname\n }\n\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname\n }\n\n // The last segment (if it's a leaf) should be ignored.\n if (\n (segment === 'page' || segment === 'route') &&\n index === segments.length - 1\n ) {\n return pathname\n }\n\n return `${pathname}/${segment}`\n }, '')\n )\n}\n\n/**\n * Strips the `.rsc` extension if it's in the pathname.\n * Since this function is used on full urls it checks `?` for searchParams handling.\n */\nexport function normalizeRscURL(url: string) {\n return url.replace(\n /\\.rsc($|\\?)/,\n // $1 ensures `?` is preserved\n '$1'\n )\n}\n","/**\n * Get pathname from absolute path.\n *\n * @param absolutePath the absolute path\n * @returns the pathname\n */\nexport function getPathnameFromAbsolutePath(absolutePath: string) {\n // Remove prefix including app dir\n let appDir = '/app/'\n if (!absolutePath.includes(appDir)) {\n appDir = '\\\\app\\\\'\n }\n const [, ...parts] = absolutePath.split(appDir)\n const relativePath = appDir[0] + parts.join(appDir)\n\n // remove extension\n const pathname = relativePath.split('.').slice(0, -1).join('.')\n return pathname\n}\n","/**\n * Cleans a URL by stripping the protocol, host, and search params.\n *\n * @param urlString the url to clean\n * @returns the cleaned url\n */\n\nexport function cleanURL(url: string | URL): URL {\n const u = new URL(url)\n u.host = 'localhost:3000'\n u.search = ''\n u.protocol = 'http'\n return u\n}\n"],"names":["__defProp","Object","__getOwnPropDesc","__getOwnPropNames","__hasOwnProp","src_exports","stringifyCookie","c","_a","attrs","Date","Boolean","stringified","encodeURIComponent","parseCookie","cookie","map","Map","pair","splitAt","key","value","decodeURIComponent","parseSetCookie","setCookie","string","name","attributes","domain","expires","httponly","maxage","path","samesite","secure","partitioned","priority","value2","compact","t","newT","Number","SAME_SITE","PRIORITY","__export","target","all","RequestCookies","ResponseCookies","module","to","from","except","desc","requestHeaders","header","Symbol","args","Array","_","n","names","result","JSON","v","responseHeaders","_b","_c","cookieString","splitCookiesString","cookiesString","start","ch","lastComma","nextStart","cookiesSeparatorFound","cookiesStrings","pos","skipWhitespace","parsed","normalizeCookie","replace","bag","headers","serialized","options","e","i","a","__nccwpck_require__","__dirname","r","TypeError","o","s","p","f","u","undefined","tryDecode","isNaN","isFinite","Math","Events","EE","addListener","clearEvent","EventEmitter","h","l","arguments","Promise","TimeoutError","Error","pTimeout","Infinity","setTimeout","clearTimeout","empty","clearInterval","setInterval","run","getIteratorFn","maybeIterable","MAYBE_ITERATOR_SYMBOL","warnNoop","publicInstance","callerName","warningKey","didWarnStateUpdateForUnmountedComponent","console","Component","props","context","updater","emptyObject","ReactNoopUpdateQueue","ComponentDummy","PureComponent","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getComponentNameFromType","type","REACT_CLIENT_REFERENCE$2","REACT_FRAGMENT_TYPE","REACT_PORTAL_TYPE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","x","isValidElementType","REACT_OFFSCREEN_TYPE","REACT_CLIENT_REFERENCE$1","disabledLog","describeBuiltInComponentFrame","prefix","match","suffix","describeNativeComponentFrame","fn","construct","reentry","frame","componentFrameCache","previousDispatcher","ReactSharedInternals","disableLogs","disabledDepth","prevLog","prevInfo","prevWarn","prevError","prevGroup","prevGroupCollapsed","prevGroupEnd","RunInRootFrame","Fake","Reflect","control","x$0","x$1","sample","namePropDescriptor","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","controlLines","_frame","reenableLogs","assign","getOwner","dispatcher","hasValidKey","config","hasOwnProperty","getter","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","self","source","owner","REACT_ELEMENT_TYPE","validateChildKeys","node","parentType","REACT_CLIENT_REFERENCE","isArrayImpl","child","isValidElement","validateExplicitKey","object","element","ownerHasKeyUseWarning","info","childOwner","prevGetCurrentStack","stack","describeUnknownElementTypeFrameInDEV","prototype","getElementKey","index","escaperLookup","noop$1","mapChildren","children","func","count","mapIntoArray","array","escapedPrefix","nameSoFar","callback","invokeCallback","oldElement","newKey","childKey","userProvidedKeyEscapeRegex","didWarnAboutMaps","resolveThenable","thenable","fulfilledValue","error","String","lazyInitializer","payload","ctor","moduleObject","resolveDispatcher","noop","enqueueTask","task","enqueueTaskImpl","requireString","_err","didWarnAboutMessageChannel","MessageChannel","channel","aggregateErrors","errors","AggregateError","popActScope","prevActQueue","prevActScopeDepth","actScopeDepth","recursivelyFlushAsyncActWork","returnValue","resolve","reject","queue","flushActQueue","isFlushing","continuation","__REACT_DEVTOOLS_GLOBAL_HOOK__","partialState","fnName","deprecatedAPIs","defineDeprecationWarning","methodName","specialPropKeyWarningShown","didWarnAboutOldJSXRuntime","WeakMap","reportGlobalError","reportError","process","didWarnNoAwaitAct","queueSeveralMicrotasks","queueMicrotask","size","exports","forEachFunc","forEachContext","didAwaitActCall","error$2","_thrownError","returnValue$jscomp$0","propName","defaultValue","typeString","childrenLength","childArray","_i","defineKeyPropWarningGetter","displayName","warnAboutAccessingKey","refObject","render","ownName","elementType","compare","scope","prevTransition","currentTransition","Set","onStartTransitionFinish","usable","action","initialState","permalink","deps","Context","formatterFn","initialValue","create","ref","passthrough","reducer","initialArg","init","subscribe","getSnapshot","getServerSnapshot","globalThis","RouteModule","constructor","userland","definition","ACTION_HEADER","FLIGHT_HEADERS","ReflectAdapter","get","prop","receiver","bind","set","has","deleteProperty","ReadonlyHeadersError","callable","HeadersAdapter","Headers","Proxy","lowercased","toLowerCase","original","keys","find","seal","merge","isArray","join","append","existing","push","delete","forEach","callbackfn","thisArg","entries","call","values","iterator","ReadonlyRequestCookiesError","RequestCookiesAdapter","cookies","SYMBOL_MODIFY_COOKIE_VALUES","for","appendMutableCookies","mutableCookies","modifiedCookieValues","getModifiedCookieValues","modified","length","resCookies","returnedCookies","getAll","MutableRequestCookiesAdapter","wrap","onUpdateCookies","responseCookies","modifiedValues","modifiedCookies","updateResponseCookies","workStore","workAsyncStorage","pathWasRevalidated","allCookies","filter","serializedCookies","tempCookies","toString","wrappedCookies","add","ensureCookiesAreStillMutable","callingExpression","requestStore","getExpectedRequestStore","phase","NEXT_CACHE_IMPLICIT_TAG_ID","WEBPACK_LAYERS_NAMES","shared","reactServerComponents","serverSideRendering","actionBrowser","api","middleware","instrument","edgeAsset","appPagesBrowser","GROUP","builtinReact","serverOnly","neutralTarget","clientOnly","bundled","appPages","BaseServerSpan","LoadComponentsSpan","NextServerSpan","NextNodeServerSpan","StartServerSpan","RenderSpan","AppRenderSpan","RouterSpan","NodeSpan","AppRouteRouteHandlersSpan","ResolveMetadataSpan","MiddlewareSpan","COOKIE_NAME_PRERENDER_BYPASS","DraftModeProvider","previewProps","req","isOnDemandRevalidate","checkIsOnDemandRevalidate","previewModeId","revalidateOnlyGenerated","cookieValue","isEnabled","_previewModeId","_mutableCookies","enable","httpOnly","sameSite","disable","mergeMiddlewareCookies","existingCookies","setCookieValue","test","charAt","substring","InvariantError","message","endsWith","withExecuteRevalidates","store","savedRevalidationState","cloneRevalidationState","newRevalidates","diffRevalidationState","prev","curr","prevTags","revalidatedTags","prevRevalidateWrites","pendingRevalidateWrites","tag","pendingRevalidates","fromEntries","promise","executeRevalidates","incrementalCache","revalidateTag","sharedAsyncLocalStorageNotAvailableError","FakeAsyncLocalStorage","getStore","exit","enterWith","maybeGlobalAsyncLocalStorage","AsyncLocalStorage","AfterContext","waitUntil","onClose","onTaskError","workUnitStores","callbackQueue","PromiseQueue","pause","after","then","errorWaitUntilNotAvailable","catch","reportTaskError","addCallback","workUnitStore","workUnitAsyncStorage","afterTaskStore","afterTaskAsyncStorage","rootTaskSpawnPhase","runCallbacksOnClosePromise","runCallbacksOnClose","wrappedCallback","runCallbacks","onIdle","taskKind","handlerError","cause","HTTP_METHODS","getDerivedTags","pathname","derivedTags","startsWith","pathnameParts","split","curPathname","slice","DYNAMIC_ERROR_CODE","DynamicServerError","description","digest","isDynamicServerError","err","StaticGenBailoutError","code","HangingPromiseRejectionError","expression","makeHangingPromise","signal","hangingPromise","addEventListener","once","ignoreReject","scheduleImmediate","cb","setImmediate","hasPostpone","React","createDynamicTrackingState","isDebugDynamicAccesses","dynamicAccesses","syncDynamicExpression","syncDynamicErrorWithStack","markCurrentScopeAsDynamic","forceDynamic","forceStatic","dynamicShouldError","route","postponeWithTracking","dynamicTracking","revalidate","dynamicUsageDescription","dynamicUsageStack","usedDynamic","throwToInterruptStaticGeneration","prerenderStore","abortAndThrowOnSynchronousRequestDataAccess","errorWithStack","validating","syncDynamicLogged","abortOnSynchronousDynamicDataAccess","createPrerenderInterruptedError","controller","abort","trackSynchronousRequestDataAccessInDev","prerenderPhase","assertPostpone","createPostponeReason","isDynamicPostponeReason","reason","includes","cloneResponse","body","body1","body2","tee","cloned1","Response","status","statusText","defineProperty","url","cloned2","RegExp","CachedRouteKind","IncrementalCacheKind","DetachedPromise","res","rej","ENCODED_TAGS","OPENING","HTML","Uint8Array","BODY","CLOSED","HEAD","BODY_AND_HTML","indexOfUint8Array","b","completeMatch","j","voidCatch","encoder","TextEncoder","streamFromBuffer","chunk","ReadableStream","enqueue","close","streamToBuffer","stream","reader","getReader","chunks","done","read","Buffer","concat","streamToString","decoder","TextDecoder","fatal","aborted","decode","NEXT_REQUEST_META","removeTrailingSlash","parsePath","hashIndex","indexOf","queryIndex","hasQuery","query","hash","addPathPrefix","addPathSuffix","pathHasPrefix","cache","normalizeLocalePath","locales","detectedLocale","lowercasedLocales","locale","segments","segment","REGEX_LOCALHOST_HOSTNAME","parseURL","base","URL","Internal","NextURL","input","baseOrOpts","opts","basePath","analyze","getNextPathnameInfo","i18n","trailingSlash","nextConfig","removePathPrefix","withoutPrefix","pathnameNoDataPrefix","paths","buildId","parseData","i18nProvider","env","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","hostname","getHostname","host","domainLocale","detectDomainLocale","domainItems","item","defaultLocale","some","domains","formatPathname","addLocale","ignorePrefix","lower","forceLocale","formatSearch","search","searchParams","port","protocol","href","origin","password","username","toJSON","clone","Request","ResponseAbortedName","ResponseAborted","clientComponentLoadStart","clientComponentLoadTimes","clientComponentLoadCount","isAbortError","pipeToNodeResponse","readable","waitUntilForEnd","errored","destroyed","createAbortController","response","AbortController","writableFinished","writer","createWriterFromResponse","started","drained","onDrain","on","off","finished","WritableStream","write","NEXT_OTEL_PERFORMANCE_PREFIX","metrics","getClientComponentLoaderMetrics","reset","performance","measure","end","flushHeaders","getTracer","trace","spanName","ok","flush","destroy","pipeTo","RenderResult","fromStatic","metadata","contentType","assignMetadata","isNull","isDynamic","toUnchunkedBuffer","toUnchunkedString","isBuffer","chainStreams","streams","writable","TransformStream","preventClose","nextStream","lastStream","chain","str","responses","encode","NEXT_PATCH_SYMBOL","trackFetchMetric","ctx","requestEndedState","ended","NEXT_DEBUG_BUILD","NEXT_SSG_FETCH_METRICS","isStaticGeneration","fetchMetrics","timeOrigin","now","idx","nextFetchId","stdout","enabled","NO_COLOR","FORCE_COLOR","isTTY","CI","TERM","replaceClose","nextIndex","formatter","open","bold","red","green","yellow","magenta","white","prefixes","wait","warn","ready","event","LOGGING_METHOD","log","prefixedLog","prefixType","shift","consoleMethod","maxSize","calculateSize","sizes","totalSize","touch","evictIfNecessary","evictLeastRecentlyUsed","lruKey","next","lruSize","clear","remove","currentSize","AUTOMATIC_ROUTE_METHODS","handleMethodNotAllowedResponse","invalidServerComponentReactHooks","setMessage","lines","ALLOWED_CODES","NOT_FOUND","FORBIDDEN","UNAUTHORIZED","isHTTPAccessFallbackError","httpStatus","RedirectStatusCode","REDIRECT_ERROR_CODE","isRedirectError","errorCode","destination","statusCode","at","printDebugThrownValueForProspectiveRender","thrownValue","getDigestForWellKnownError","originalErrorStack","stackStart","AppRouterContext","LayoutRouterContext","GlobalLayoutRouterContext","TemplateContext","MissingSlotContext","CacheSignal","earlyListeners","listeners","tickPending","taskPending","noMorePendingCaches","nextTick","inputReady","cacheReady","beginRead","endRead","isDefinitelyAValidIdentifier","describeStringPropertyAccess","stringify","wellKnownProperties","errorRef","current","logErrorOrWarn","__NEXT_DYNAMIC_IO","flushCurrentErrorIfNew","createDedupedByCallsiteServerErrorLoggerDev","getMessage","callStackFrames","CachedParams","makeUntrackedExoticParams","underlyingParams","cachedParams","syncIODev","missingProperties","warnForIncompleteEnumeration","warnForSyncAccess","createParamsAccessError","describeListOfPropertyNames","properties","WrappedNextRouterError","AppRouteRouteModule","sharedModules","resolvedPagePath","nextConfigOutput","serverHooks","actionAsyncStorage","methods","autoImplementMethods","handlers","acc","method","implemented","GET","allow","Allow","sort","OPTIONS","hasNonStaticMethods","dynamic","isStaticGenEnabled","mod","generateStaticParams","Log","toUpperCase","do","handler","actionStore","implicitTags","request","trackingState","dynamicIOEnabled","renderOpts","experimental","dynamicIO","patchFetch","createDedupeFetch","originalFetch","getCacheEntries","resource","cacheKey","keepalive","mode","redirect","credentials","referrer","referrerPolicy","integrity","cacheEntries","entry","fetch","createPatchedFetcher","originFetch","patched","fetchUrl","isInternal","internal","hideSpan","NEXT_OTEL_FETCH_DISABLED","fetchStart","cacheSignal","kind","SpanKind","getRequestMeta","cacheWarning","cacheReasonOverride","finalRevalidate","isDraftMode","isRequestInput","field","getNextField","currentFetchRevalidate","tags","validateTags","validTags","invalidTags","revalidateStore","collectedTags","pageFetchCacheMode","fetchCache","isUsingNoStore","isUnstableNoStore","currentFetchCacheConfig","cacheReason","hasExplicitFetchCacheOptOut","noFetchConfigAndForceDynamic","validateRevalidate","revalidateVal","normalizedRevalidate","_headers","initHeaders","hasUnCacheableHeader","isUnCacheableMethod","hasNoExplicitCacheConfig","autoNoCache","isPrerendering","renderSignal","isCacheableRevalidate","serverComponentsHmrCache","generateCacheKey","fetchIdx","handleUnlock","doOriginalFetch","isStale","requestInputFields","reqInput","reqOptions","_ogBody","otherInput","clonedInit","fetchType","cacheStatus","externalRevalidate","bodyBuffer","arrayBuffer","fetchedData","data","finally","isForegroundRevalidate","isHmrRefreshCache","cachedFetchData","isHmrRefresh","lock","softTags","isFallback","isRevalidate","pendingRevalidate","hasNextConfig","pendingRevalidateKey","revalidatedResult","pendingResponse","__nextPatched","__nextGetStaticStore","_nextOriginalFetch","handlerContext","params","createServerParamsForRoute","createPrerenderParams","fallbackParams","fallbackRouteParams","hasSomeFallbackParams","makeAbortingExoticParams","newValue","enumerable","configurable","makeErroringExoticParams","augmentedUnderlying","isPrefetchRequest","makeDynamicallyTrackedExoticParamsWithDevWarnings","proxiedProperties","unproxiedProperties","proxiedPromise","ownKeys","parsedUrlQueryToParams","userlandRevalidate","defaultRevalidate","prospectiveResult","prospectiveController","prospectiveRenderIsDynamic","prospectiveRoutePrerenderStore","expire","stale","prerenderResumeDataCache","__NEXT_VERBOSE_LOGGING","dynamicReason","finalController","finalRoutePrerenderStore","responseHandled","bodyHandled","createDynamicIOError","Location","isAction","getRedirectStatusCodeFromError","pendingWaitUntil","NEXT_PRIVATE_DEBUG_CACHE","collectedRevalidate","collectedExpire","collectedStale","handle","staticGenerationContext","page","sharedContext","isAppRoute","getServerActionRequestMetadata","actionId","isURLEncodedAction","isMultipartAction","isFetchAction","isServerAction","getImplicitTags","newTags","nextUrl","createRequestStoreImpl","renderResumeDataCache","defaultOnUpdateCookies","setHeader","getHeaders","cleaned","requestCookies","getMutableCookies","userspaceMutableCookies","wrapWithMutableAccessCheck","draftMode","__serverComponentsHmrCache","prerenderManifest","preview","createWorkStore","supportsDynamicResponse","reduce","__incrementalCache","cacheLifeProfiles","nextExport","rootParams","reactLoadableManifest","assetPrefix","afterContext","createAfterContext","onAfterTaskError","forceStaticRequestHandlers","requireStaticRequestHandlers","proxyNextRequest","nextUrlHandlers","trackDynamic","urlCloneSymbol","nextRequestHandlers","nextURLSymbol","requestCloneSymbol","getPathnameFromAbsolutePath","absolutePath","appDir","parts","relativePath","tracer","setRootSpanAttribute","POST","PUT","DELETE","PATCH","searchParamsSymbol","hrefSymbol","toStringSymbol","headersSymbol","cookiesSymbol","forceStaticNextUrlHandlers","URLSearchParams","cleanURL","requireStaticNextUrlHandlers"],"mappings":"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"}
|